DataContractSerializer/DataContractJsonSerializer在序列化具有Seria

本文关键字:Seria 序列化 DataContractJsonSerializer DataContractSerializer | 更新日期: 2023-09-27 17:57:48

为什么在具有Serializable属性的类上使用DataContractSerializerDataContractJsonSerializer序列化失败?

异常:"System.Runtime.Serialization.Json.DataContractJsonSerializer"不能被序列化。考虑使用DataContractAttribute进行标记属性,并标记要使用序列化的所有成员DataMemberAttribute属性。如果类型是集合,请考虑用CollectionDataContractAttribute""标记

DataContractSerializer s与DataContract/DataMember属性配合使用效果良好,但它也与没有这些属性的类配合使用,除非类中有Serializable属性,否则它会失败,从而生成上述异常。

DataContractSerializer/DataContractJsonSerializer在序列化具有Seria

我认为您不需要将[Serializable]放在POCO类中。它将自动序列化您的对象,即使不将它们放在类中。

我解决了这个问题,我的类中有一个私有属性Serializer,它返回System.Runtime.Serialization.Json.DataContractJsonSerializer

    private XmlObjectSerializer Serializer
    {
        get
        {
            _serializer = _serializer ?? GetSerializer(GetType());
            return _serializer;
        }
    }

即使它是私有的,DataContractJsonSerializer也会在序列化中包含它。不仅仅是那处房产,私人领域也是如此。这就是当您不指定DataContract和DataMember属性时它的行为。