【发布时间】: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 序列化属性,看看是否可以使用这些属性。
-
您创建了一个方法,并且需要和数组/列表对象一起使用该方法。序列化忽略方法。
标签: c# wcf serialization datacontract