WCF DataMember列表<>没有封闭元素

时间:2010-07-16 18:12:39

标签: c# wcf datacontract

以下DataContract:

    [DataContract(Namespace = "http://namespace", Name = "Blarg")]
    public class Blarg
    {
        [XmlAttribute("Attribute")]
        public string Attribute{ get; set; }

        [DataMember(Name = "Record", IsRequired = false, Order = 4)]
        public List<Record> Record{ get; set; }
    }

序列化为:

<Blarg Attribute="blah">
    <Record>
        <Record/>
        <Record/>
        <Record/>
    </Record>
</Blarg>

但我想要这个:

<Blarg>
    <Record/>
    <Record/>
    <Record/>
<Blarg/>

DataContractSerializer似乎是自动插入标题父级,我不想要它。

如何删除包裹<Record>

2 个答案:

答案 0 :(得分:2)

我认为你不能那样做。

DataContractSerializer针对速度进行了优化,在此过程中牺牲了一些灵活性和一些功能(如XML属性)。我认为你没有太多机会影响DCS - 它尽可能快地完成它的工作。您可以非常巧妙地定义来序列化(使用[DataMember]属性,但您在 序列化方面并没有真正的发言权。

如果你需要更多的控制权,你可以选择XmlSerializer - 在这种情况下,你的序列化速度要慢10-15%,但你可以控制数据的形状等等。但即便如此case - 我不知道有什么方法可以告诉XML序列化程序将集合序列化为一系列XML标记而没有集合的封闭标记。

答案 1 :(得分:0)

我找到了答案here。 请看下面的简短故事(对于长期结帐的网址):

 [XmlElement ("Parameter")]
    public List<Parameter> Parameters;