我正在使用新的.NET 3.0 DataContractSerializer . 我有Nullable <>和List <>对象我要序列化 . 例:
[DataContract(Namespace = "")]
class Test
{
public static void Go()
{
Test test = new Test();
var dcs = new DataContractSerializer(typeof(Test));
dcs.WriteObject(new StreamWriter("test.xml").BaseStream, test);
}
[DataMember]
public Nullable<int> NullableNumber = null;
[DataMember]
public int Number = 5;
[DataMember]
public List<int> Numbers = new List<int>();
}
当.NET序列化空列表或空列表时,它将nil(对于Nullable)和空(对于列表)元素放入XML中 . 上面的例子生成:
<Test xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<NullableNumber i:nil="true"/>
<Number>5</Number>
<Numbers xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
</Test>
由于我没有时间描述的原因,我想消除多余的NullableNumber和Numbers元素,如下所示:
<Test xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Number>5</Number>
</Test>
实际上,上面的文件反序列化了串行器就好了 .
谢谢你的帮助!
2 回答
标记该字段
这将至少适用于可空值类型的情况 . 对于List情况,您可能需要在需要时推迟创建列表,否则如果成员在序列化之前为空,则为null .
我真的需要相同的东西,但全局应用于生成的RIA类中的许多字段 . 我不确定这个XML是否可以被DataConstract接受用于反序列化 . 但它是可读的,符合我的目的......