使用 DataContractSerializer 时与 XmlArrayItem 等效的是啥? [复制]
Posted
技术标签:
【中文标题】使用 DataContractSerializer 时与 XmlArrayItem 等效的是啥? [复制]【英文标题】:What is the equivalent to XmlArrayItem when using DataContractSerializer? [duplicate]使用 DataContractSerializer 时与 XmlArrayItem 等效的是什么? [复制] 【发布时间】: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,成功了
【参考方案1】:
这对我有用。这或多或少正是@dbc 所建议的:)
[CollectionDataContract(Namespace = "", ItemName = "TrackingNumber")]
internal class TrackingNumbersList : List<string>
[DataContract(Name = "ReportData", Namespace = "")]
public class Foo
[DataMember]
public TrackingNumbersList TrackingNumbers get; set;
【讨论】:
以上是关于使用 DataContractSerializer 时与 XmlArrayItem 等效的是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 DataContractSerializer 时设置属性的初始值
使用 DataContractSerializer 和 XmlDictionaryWriter 序列化 JObject 后崩溃
在原语列表上使用 DataContractSerializer 的自定义元素名称
使用 DataContractSerializer 的接口中的显式类型