我有一个名为CustomerDetail的类,并且我在(CustomerDetail的)System.Collections.Generic.List中管理这些对象.我以一种普通的方式序列化这个对象...

    Private Sub CustomerDetailsExportToXml(Details As System.Collections.Generic.List(Of CustomerDetails))
        Dim x As New System.Xml.Serialization.XmlSerializer(Details.GetType)
        Using s As New FileStream("customerdetails.xml", FileMode.Create)
        x.Serialize(s, Details)
        End Using
    End Sub

...并获取普通的XML...

  <?xml version="1.0"?>
  <ArrayOfCustomerDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CustomerDetails>
      <Acronym>MSD</Acronym>
      <FriendlyName>Main Street Diner</FriendlyName>
    </CustomerDetails>
  </ArrayOfCustomerDetails>

为了提高可读性,我想向CustomerDetail标记添加一个名为"Acronym"的属性,该属性将包含该标记的值:

<CustomerDetails Acronym="MSD">

我可以在加载/修改/保存XML的后序列化方法中做到这一点,但我担心生成的XML不能反序列化.属性的添加可以在序列化时完成吗?

推荐答案

由于您似乎已经拥有与element具有相同值的Acronym,因此为您获取序列化程序应该非常简单.想必现在你会有这样的感觉:

public class CustomerDetails
{
    public string Acronym {get;set;}
}

要将其设置为属性,您只需执行ask:

public class CustomerDetails
{
    [XmlAttribute]
    public string Acronym {get;set;}
}

您也可以通过手动配置序列化程序来完成without个属性,但这是一项额外的工作.

.net相关问答推荐

找不到包Microsoft.VisualStudio.Azure.Containers.Tools.Targets

是否可以将 SandCastle 创建的两个页面合并到一个主页中?

代码访问安全是否在任何现实世界中使用?

StreamWriter.Flush() 和 StreamWriter.Close() 有什么区别?

无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0

如何获取控制台应用程序的执行目录

根源是什么?

在 WinForms 应用程序中查找焦点控件的首选方法是什么?

为什么要判断这个!= null?

控制台应用程序的退出时

System.String.Copy 在 .NET 中有什么用?

WCF服务客户端:内容类型text/html;响应消息的charset=utf-8 与绑定的内容类型不匹配

返回 IList 是否比返回 T[] 或 List 更糟糕?

形成两个列表并集的最简单方法

.NET 进程间通信的最佳 Select 是什么?

为什么会出现编译错误使用未分配的局部变量?

让 String.Replace 只打整个单词的方法

无法加载文件或程序集Antlr3.Runtime (1)或其依赖项之一

如何将整个字符串与正则表达式匹配?

ConfigurationManager.AppSettings - 如何修改和保存?