我正在研究使用 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; }
}

此同时具有XmlSerializerDataContractSerializer属性,但是我不得不失去泛型在我们使用的响应的类型(因此“封闭” MyResponse型)

其他提示

根据这篇文章,DataContractSerializer 似乎不支持自定义生成的 xml。

http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/

MS 网站上有一条重要说明:'DataContractAttribute 属性不应应用于已实现 ISerialized 接口或用 SerializedAttribute 标记的类。如果您尝试序列化此类类型的实例,则会引发异常。

附:抱歉,我无法发布第二个链接,但引擎不允许向新用户发布多个链接。

问候 赫伯斯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top