Xav*_*nas 2 .net wcf serialization
我有一组使用该[Serializable]属性的现有类.我需要在WCF服务中公开它们,因此我需要它们具有该[DataContract]属性.它只适用于Serializable,但属性变得有趣,如... k__BackingField.
这些类也在其他地方使用,我想知道我是否冒险通过替换属性来破坏任何东西.此外,它们是可能的并且两者兼顾是一个好主意吗?
谢谢.
当您只指定DataContractAttribute但没有专门定义要包含的成员时,默认行为是序列化类的所有字段,包括私有字段.所以你得到的名字是因为你正在使用自动实现的属性,我想.
换句话说,将类定义更改为类似于以下内容.请注意我要序列化的属性上的DataMember属性.
[DataContract]
public class MyClass {
[DataMember]
public string SomeString {
get;
set;
}
[DataMember]
public int SomeInt {
get;
set;
}
public string DontSerializeThis {
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
这将导致DataContractSerializer序列化属性,而不是编译器生成的后备字段.但是,它确实要求属性是读/写公共属性,因为它将通过这些属性访问器来获取和设置序列化数据.
另一种选择是将自动实现的属性更改为"普通"属性,这意味着添加自己的支持字段.然后,您可以保留所有DataMember属性,这意味着它们都将被序列化,或者您可以将DataMember属性添加到您创建的新字段中,这样您就可以根据需要在序列化输出中重命名它们.
最后,关于在两个系统中是否可以将类序列化是一个好主意,而不是真的.如果您希望类使用BinaryFormatter或XmlSerializer等参与经典序列化,那么您应该只针对该场景,因为DataContractSerializer已经可以序列化这些类.
如果您的目标是快速,高效,.NET 3+到.NET 3+(或Silverlight)通信,那么DataContract就是您的选择.如果您的目标是对XML表示的互操作性和/或控制,请坚持使用XML序列化属性.