【发布时间】:2021-02-28 22:01:45
【问题描述】:
我正在使用 DataContractSerializer 序列化具有 List 类型属性的对象,并且我想控制字符串的发出方式。
[DataContract(Name = "ReportData", Namespace = "")]
public class Foo
{
[DataMember]
public List<string> TrackingNumbers { get; set; }
}
当我序列化这个对象时,我得到了这个 XML:
<ReportData xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TrackingNumbers xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>14735ec8-81c4-44e4-9bbe-6c661eb74e54</a:string>
</TrackingNumbers>
</ReportData>
我想要的是:
<ReportData xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TrackingNumbers xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<TrackingNumber>14735ec8-81c4-44e4-9bbe-6c661eb74e54</TrackingNumber>
</TrackingNumbers>
</ReportData>
这可以通过 DataContractSerializer 实现吗?这对 XmlSerializer 和 XmlArrayItem 来说是微不足道的,但我无法弄清楚。
另外,是否可以生成不包含任何命名空间声明的 XML?
非常感谢。
【问题讨论】:
-
你可以继承
List<string>并应用[CollectionDataContract(ItemName="TrackingNumber", Namespace = "")]。请参阅:Custom Element Names using the DataContractSerializer on a List of primitives 和 How to Deserialize XML using DataContractSerializer。 -
非常感谢@dbc,成功了
标签: c# xml datacontractserializer