通过 DataContractSerializer 跳过 DataMember
Posted
技术标签:
【中文标题】通过 DataContractSerializer 跳过 DataMember【英文标题】:Skip DataMember via DataContractSerializer 【发布时间】:2012-04-22 17:51:14 【问题描述】:我有一堂课:
[DataContract]
public class Result
[DataMember] public String Log get; set;
[DataMember] public String Data get; set;
我通过 WCF 发送这个类,它工作正常。但是我想在接收后将这个类保存到一个xml文件中。我试着写:
var serializer = new DataContractSerializer(typeof (T),null,int.MaxValue,
false,true,null,new SharedTypeXmlResolver());
var settings = new XmlWriterSettings Indent = true ;
using (var backing = new StringWriter(CultureInfo.InvariantCulture))
using (var writer = XmlWriter.Create(backing, settings))
serializer.WriteObject(writer, result);
return backing.ToString();
但我想将“日志”属性保存到 XML 文件,并且不想保存“数据”属性。我该怎么做?
【问题讨论】:
查看 XmlIgnore 属性 【参考方案1】:XmlIgnore 不适用于 DataContract 序列化。这个合约是可选的,而不是 Serializable 是可选的。
【讨论】:
【参考方案2】:使数据可选:
[DataMember(EmitDefaultValue = false)] public String Data get; set;
然后擦除数据:
result.Data = null;
【讨论】:
以上是关于通过 DataContractSerializer 跳过 DataMember的主要内容,如果未能解决你的问题,请参考以下文章
使用 DataContractSerializer 时与 XmlArrayItem 等效的是啥? [复制]
DataContractSerializer 不调用我的构造函数?
使用 DataContractSerializer 自定义序列化
DataContractSerializer - 如何将 xml 输出到字符串(而不是文件)
使用 DataContractSerializer 时设置属性的初始值
使用 DataContractSerializer 和 XmlDictionaryWriter 序列化 JObject 后崩溃