动态忽略数据成员被序列化

Sur*_*LSV 8 .net c# wcf serialization

我们有一个使用多个DataContracts的现有WCF服务.我们想要根据设备修改序列化,这样当从移动设备访问时,服务应该只序列化一些重要的数据成员(不是全部)

我们这里有两个选择

  1. 为不同类型的设备创建单独的操作和数据协定
  2. 与实际的xml序列化混淆并抑制基于设备创建不必要的元素

我们不想使用第一个选项,因为它在将来引入了许多冗余代码问题

小型研究表明,我们需要使用IXmlSerializable并覆盖readXML()和writeXML()方法.但与此同时,我已经看到DataContract和IXmlSerializable不应该一起使用的地方

任何搞乱实际序列化的例子都非常感谢.

[DataContract]
public class TokenMessage
{
    string tokenValue;
    string extraValue;
    [DataMember]
    public string Token
    {
        get { return tokenValue; }
        set { tokenValue = value; }
    }
    [DataMember]
    public string Extra 
    {
        get { return extraValue; }
        set { extraValue = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我从移动设备访问返回典型TokenMessage数据协定的服务时,我不希望序列化"额外"数据成员,即当我为操作合同提供不同的参数时,它应该能够序列化部分/全部数据成员(取决于操作)

PS:现在请忽略设备检测部分.让我们假设我们在操作合同中有一个参数,这有助于我们识别设备

小智 -2

在您的模型中添加属性“ShouldSerializeYOUR_PROPERTY_NAME”,当您不希望属性序列化时将其设置为 false。在此处查看更多信息:http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.shouldserializeproperty (v=vs.110).aspx

  • `ShouldSerialize` 与 WPF 相关,我不知道它对您的 WCF 服务有何帮助。 (2认同)