【发布时间】:2011-12-21 14:05:04
【问题描述】:
如何使用 Data Contract Serializer 序列化没有外部元素的列表?我正在使用.Net 3.5。我有一个类,其中包含一个列表,除其他外,我希望在没有外部元素的情况下对其进行序列化以符合相关的 XSD:
[DataContract(Name="MyClass")]
public class MyClass
{
...
[DataMember(Name="Parameters")]
public List<Parameter> Parameters;
...
}
[DataContract(Name="Parameter")]
public struct Parameter
{
[DataMember(Name="ValueName")]string ValueName;
[DataMember(Name="Value")]int Value;
public Parameter(string ValueName, int Value)
{
this.ValueName = ValueName;
this.Value = Value;
}
}
以上序列化为(假设列表中只有一个Parameter):
<MyClass>
<Parameters>
<Parameter>
<ValueName></ValueName>
<Value></Value>
</Parameter>
</Parameters>
</MyClass>
我想序列化如下:
<MyClass>
<Parameter>
<ValueName></ValueName>
<Value></Value>
</Parameter>
</MyClass>
使用 XmlSerializer 我可以通过将 [XmlElement] 应用于列表来做到这一点:
[XmlElement ("Parameter")]
public List<Parameter> Parameters;
但是我不想使用XmlSerializer,因为我的类有一些不适合序列化的属性,我希望处理那些使用 [OnSerializing] 系列属性的属性。
谢谢。
【问题讨论】:
-
您对使用 DataContracts 的消息格式没有太多控制权。您可能需要使用 MessageContract - 请参阅 msdn.microsoft.com/en-us/library/ms730255.aspx
标签: c# xml-serialization datacontractserializer