如果我在一个类上具有[Serializable]属性,那么它将导致所得的序列化Json字符串包括该框架创建的后备成员。
例如,我的ID字段如下所示:
<Id>k__BackingField=20001
我可以在SOF和其他地方找到很多资源来解决此问题,但是当Json序列化器看到[Serializable]属性时,为什么我的行为却有所不同。
如果Jason序列化程序不对成员进行序列化,而仅对属性进行序列化,那么当用[Serializable]属性修饰类时,为什么它的行为有所不同?
请注意,由于我已经找到了该问题,因此我不寻求解决此问题的方法。我想知道为什么Newtonsoft.Jsonserialiser在这里的行为有所不同。
答案 0 :(得分:0)
如果将来有人想找到原因,以下说明Json.Net如何序列化对象:
Breakdown of Type Serialization > Objects
默认情况下,类型的属性在退出模式下序列化。什么 这意味着所有带有吸气剂的公共领域和财产都是 自动序列化为JSON,以及 通过放置JsonIgnoreAttribute退出不应序列化的选项 在他们。要序列化私有成员,JsonPropertyAttribute可以 放置在私有字段和属性上。
类型也可以使用选择加入模式进行序列化。仅属性和 具有JsonPropertyAttribute或DataMemberAttribute的字段 他们将被序列化。对象的选择加入模式由 将JsonObjectAttribute或DataContractAttribute放在类型上。
最后,可以使用字段模式将类型序列化。所有领域,都 公共和私有,被序列化并且属性被忽略。这个 可以通过在具有以下类型的类型上设置MemberSerialization.Fields来指定 JsonObjectAttribute或通过使用.NET SerializableAttribute和 将DefaultContractResolver上的IgnoreSerializableAttribute设置为 错误。