使用Serializable属性序列化类时,DataContractSerializer / DataContractJsonSerializer失败

时间:2013-02-06 09:16:55

标签: c# asp.net .net clr

为什么序列化在使用DataContractSerializer属性的类上使用DataContractJsonSerializerSerializable时失败?

  

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

标记它

DataContractSerializer适用于DataContract / DataMember属性,但它也适用于没有这些属性的类,除非类中有Serializable属性失败,产生上述例外。

2 个答案:

答案 0 :(得分:1)

我认为您不需要在POCO类中放置[Serializable]。它会自动序列化你的对象,甚至不会把它们放在你的课堂上。

答案 1 :(得分:1)

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

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

即使它是私有的,DataContractJsonSerializer也会将其序列化。不仅仅是那个属性,还有私人领域。这是它在您未指定DataContract和DataMember属性时的行为方式。