以下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>
?
答案 0 :(得分:2)
我认为你不能那样做。
DataContractSerializer
针对速度进行了优化,在此过程中牺牲了一些灵活性和一些功能(如XML属性)。我认为你没有太多机会影响DCS - 它尽可能快地完成它的工作。您可以非常巧妙地定义要来序列化(使用[DataMember]
属性,但您在 序列化方面并没有真正的发言权。
如果你需要更多的控制权,你可以选择XmlSerializer
- 在这种情况下,你的序列化速度要慢10-15%,但你可以控制数据的形状等等。但即便如此case - 我不知道有什么方法可以告诉XML序列化程序将集合序列化为一系列XML标记而没有集合的封闭标记。
答案 1 :(得分:0)
我找到了答案here。 请看下面的简短故事(对于长期结帐的网址):
[XmlElement ("Parameter")]
public List<Parameter> Parameters;