我正在尝试使用DataContractSerializer
序列化一个简单的对象:
public class MyType {
public string MyValue { get; set; }
}
我做了大量的研究并发现according to MSDN,与普遍看法相反,属性[DataContract]
是可选的,如果没有在类上指定属性,则所有公共读/写属性和字段是序列化的。事实上,当我将其序列化时 - 它按预期工作。
现在,如果我在类上添加[Serializable]
属性,我会得到一个不同的序列化,其中包含臭名昭着的前缀'k__BackingField'(因为我的属性是一个自动属性)。
我的问题:
答案 0 :(得分:-1)
对于您的第一个问题: [Serializable]
属性适用于.NET Remoting传输,它带有旧版兼容性序列化。因此,当您使用WCF时,不鼓励应用此属性。您可以阅读有关此here的更多信息。
您的第二个问题,如果没有更多细节,就不容易回答。一个简单的解决方法是将[System.Xml.Serialization.XmlRoot()]
属性应用于数据模型类。此属性不适用于Web服务,但它确实提供了同样忽略私有属性的干净SOAP消息。互操作性可能是一个问题,我没有对此进行测试。
更好的解决方法是使用[DataContract]
。这使您可以精确控制通过线路发送的数据。在我看来,通过服务发送大量数据模型比代码更具代码味道。我会尝试在可能的情况下将这些重构为较小的类。