DataContractSerializer/DataContractJsonSerializer在序列化具有Seria
本文关键字:Seria 序列化 DataContractJsonSerializer DataContractSerializer | 更新日期: 2023-09-27 17:57:48
为什么在具有Serializable
属性的类上使用DataContractSerializer
或DataContractJsonSerializer
序列化失败?
异常:"System.Runtime.Serialization.Json.DataContractJsonSerializer"不能被序列化。考虑使用DataContractAttribute进行标记属性,并标记要使用序列化的所有成员DataMemberAttribute属性。如果类型是集合,请考虑用CollectionDataContractAttribute""标记
DataContractSerializer
s与DataContract
/DataMember
属性配合使用效果良好,但它也与没有这些属性的类配合使用,除非类中有Serializable
属性,否则它会失败,从而生成上述异常。
我认为您不需要将[Serializable]放在POCO类中。它将自动序列化您的对象,即使不将它们放在类中。
我解决了这个问题,我的类中有一个私有属性Serializer,它返回System.Runtime.Serialization.Json.DataContractJsonSerializer
private XmlObjectSerializer Serializer
{
get
{
_serializer = _serializer ?? GetSerializer(GetType());
return _serializer;
}
}
即使它是私有的,DataContractJsonSerializer也会在序列化中包含它。不仅仅是那处房产,私人领域也是如此。这就是当您不指定DataContract和DataMember属性时它的行为。