如何用 ItemName 中的数字序列化 XML 集合?
Posted
技术标签:
【中文标题】如何用 ItemName 中的数字序列化 XML 集合?【英文标题】:How do I serialize an XML collection with numbers in ItemName? 【发布时间】:2019-06-28 12:32:04 【问题描述】:我一直在 MSDN 和 Google 上搜索网络,以寻找以下问题的答案。
如何在c#中序列化一个命名如下的集合?
<foocollection>
<fooitem1></fooitem1>
<fooitem2></fooitem2>
...
</foocollection>
我看到您可以在 DataContract 中执行此操作:
[CollectionDataContract(Name="foocollection", ItemName = "fooitem")]
public class FooCollection<T> : List<T>
public FooCollection()
public FooCollection(T[] items)
foreach(var i in items)
Add(i);
序列化程序是 ASP.NET Web API 的默认 XML 序列化程序。此代码假定上面发布的 XML 来自客户端。
我已成功将上述内容序列化为动态,但动态不会成为可接受的解决方案。
如何使用以下任何命名空间或其他命名空间成功完成序列化,但需要注意的是我可以序列化到上述类?我愿意根据需要添加额外的类来完成上述工作,只要我不必为集合中的每个项目都创建一个类。
System.ComponentModel.DataAnnotations
System.Xml.Serialization
非常感谢您。
【问题讨论】:
使用标准 XML 序列化,每个“fooitem”都需要一个类对象。使用自定义 XElement/XmlElement,您可以轻松地从对象创建数组。 所以你是说如果不为集合中的每个项目创建一个类就不可能序列化集合? 是属性还是类?您可以创建自定义序列化程序,但使用 XElement 库可能更容易。 它是一个类 - 上面的类的输出应该是上面的 XML。我将花一些时间查看 XML 序列化属性,看看是否可以使用这些属性。 您创建了一个方法,并且需要和数组/列表对象一起使用该方法。序列化忽略方法。 【参考方案1】:由于您没有提及您正在使用哪种 xml 序列化方法,所以很难说,但您可能应该使用 DataContractSerializer 来启用 DataContract 属性。要使用 CollectionDataContractAttribute,您还应该拥有将所述属性放入的集合类,例如 example
【讨论】:
我刚刚更新了我的问题 - 您能否详细说明您所指的内容,可能带有代码示例?我已经查看了 MSDN 上的文档,但仍然卡住了。 “它不起作用”是对所发生情况的模糊描述。什么是序列化为 xml 文件?另外,您使用什么代码来序列化此类集合?我的意思是应该创建 DataContractSerializer 的实例,然后使用您的集合的编写器和实例调用方法(即 WriteObject)。代码示例位于第一个链接的开头。您可能还需要为包含您的集合类的程序集启用选项“生成序列化程序集”。此选项位于项目属性 iirc 的构建选项中。 感谢您要求澄清。这是通过 ASP.NET Web API 使用 XML 的默认序列化程序。我们正在处理来自客户端的数据。客户端正在向我们发布这些数据。我会研究一下 WriteObject 看看我能做些什么。 好吧,恐怕我无法提出任何建议……除了仔细研究传入的 xml。如果它有这个精确的标签命名,即标签名称中包含项目索引,那么我认为它是错误的。序列化程序在编写 xml 时,会将所有项目标签命名为“fooitem”。如果列表实际上是空的,那么我会检查一下。以上是关于如何用 ItemName 中的数字序列化 XML 集合?的主要内容,如果未能解决你的问题,请参考以下文章