使用 DataContractSerializer 自定义序列化
-
13-09-2019 - |
题
我正在研究使用 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 的第一个输出?
解决方案
如果你正在写的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
型)
其他提示
根据这篇文章,DataContractSerializer 似乎不支持自定义生成的 xml。
MS 网站上有一条重要说明:'DataContractAttribute 属性不应应用于已实现 ISerialized 接口或用 SerializedAttribute 标记的类。如果您尝试序列化此类类型的实例,则会引发异常。
附:抱歉,我无法发布第二个链接,但引擎不允许向新用户发布多个链接。
问候 赫伯斯
不隶属于 StackOverflow