我正在研究使用DataContractSerializer,但我无法获得正确的输出格式。 DataContractSerializer序列化以下类
[DataContract(Name = "response")]
public class MyCollection<T>
{
[DataMember]
public List<T> entry { get; set; }
[DataMember]
public int index { get; set; }
}
向
<response><entry><T1>object1</T1><T2>object2</T2></entry><index></index></response>
但我想要的是
<response><entry><T1>object1</T1></entry><entry><T2>object2</T2></entry><index></index></response>
如何使用DataContractSerializer执行此操作?但是还要维护DataContractJsonSerializer的第一个输出?
答案 0 :(得分:4)
基于这篇文章,似乎DataContractSerializer不支持自定义生成的xml。
从MS网站上有一个重要的注意事项: 'DataContractAttribute属性不应该应用于已经实现ISerializable接口的类或者使用SerializableAttribute标记的类。如果您尝试序列化此类型的实例,则会抛出异常。'
PS:抱歉,我无法发布第二个链接,但引擎不允许向新用户发布多个链接。
此致 Herberth
答案 1 :(得分:1)
如果您正在编写xml,我想知道xml序列化程序是不是更好的选择(它对名称有更精细的控制等)。
问题是,XmlSerializer
并不总是泛型的最大粉丝......
此外 - 尝试了一些涉及[XmlArray]
/ [XmlArrayItem
等等的选项...看起来很难达到你想要的格式......再加上它不容易猜到你的意思是T1
/ T2
- 但以下内容可能会接近:
[XmlRoot("response")]
public class MyResponse : MyCollection<int> { }
[DataContract(Name = "response")]
public class MyCollection<T>
{
[DataMember]
[XmlElement("entry")]
public List<T> entry { get; set; }
[DataMember]
public int index { get; set; }
}
这有XmlSerializer
和DataContractSerializer
属性,但我不得不丢失我们用于响应的类型的泛型(因此“封闭”MyResponse
类型)