1
5
当您只指定DataContractAttribute,而不指定要包含的成员的特定属性时,默认行为是序列化类的所有字段,包括私有字段。所以你得到的名字是因为你使用的是自动实现的属性,我猜。 换句话说,将类定义更改为如下所示。注意我想要序列化的属性上的DataMember属性。
这将导致DataContractSerializer序列化 而不是编译器生成的支持字段。但是,它确实要求属性是读/写公共属性,因为它将通过这些属性访问器来获取和设置序列化数据。 另一个选项是将自动实现的属性更改为“普通”属性,这意味着添加自己的备份字段。然后您可以关闭所有DataMember属性,这意味着它们都将被序列化,或者您可以将DataMember属性添加到您创建的新字段中,这样您就可以根据需要在序列化输出中重命名它们。 最后,谈谈让一个类在两个系统中都可以序列化是不是一个好主意。如果希望类使用BinaryFormatter或XmlSerializer之类的东西参与经典序列化,那么应该只针对该场景,因为DataContractSerializer已经可以序列化这些类了。 如果您的目标是快速、高效的.NET3+到.NET3+(或Silverlight)的通信,那么DataContract就是一个不错的选择。如果您的目标是互操作性和/或对XML表示的控制,请坚持使用XML序列化属性。 |
2
0
由于同一答案中提到的默认行为,将导致一个备份字段被序列化的属性。应该是的
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ignoredatamemberattribute.aspx |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |