通过 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 后崩溃