【问题标题】: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?

非常感谢。

【问题讨论】:

标签: c# xml datacontractserializer


【解决方案1】:

这对我有用。这或多或少正是@dbc 所建议的:)

[CollectionDataContract(Namespace = "", ItemName = "TrackingNumber")]
internal class TrackingNumbersList : List<string>
{ }
    
[DataContract(Name = "ReportData", Namespace = "")]
public class Foo
{
    [DataMember]
    public TrackingNumbersList  TrackingNumbers { get; set; }
}

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2011-03-11
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多