为什么[Serializable]导致Newtonsoft.Json序列化程序包括支持字段?

时间:2019-03-28 16:30:28

标签: json.net serializable

如果我在一个类上具有[Serializable]属性,那么它将导致所得的序列化Json字符串包括该框架创建的后备成员。

例如,我的ID字段如下所示:

<Id>k__BackingField=20001  

我可以在SOF和其他地方找到很多资源来解决此问题,但是当Json序列化器看到[Serializable]属性时,为什么我的行为却有所不同。

如果Jason序列化程序不对成员进行序列化,而仅对属性进行序列化,那么当用[Serializable]属性修饰类时,为什么它的行为有所不同?

请注意,由于我已经找到了该问题,因此我不寻求解决此问题的方法。我想知道为什么Newtonsoft.Jsonserialiser在这里的行为有所不同。

1 个答案:

答案 0 :(得分:0)

如果将来有人想找到原因,以下说明Json.Net如何序列化对象:

Breakdown of Type Serialization > Objects

  

默认情况下,类型的属性在退出模式下序列化。什么   这意味着所有带有吸气剂的公共领域和财产都是   自动序列化为JSON,以及   通过放置JsonIgnoreAttribute退出不应序列化的选项   在他们。要序列化私有成员,JsonPropertyAttribute可以   放置在私有字段和属性上。

     

类型也可以使用选择加入模式进行序列化。仅属性和   具有JsonPropertyAttribute或DataMemberAttribute的字段   他们将被序列化。对象的选择加入模式由   将JsonObjectAttribute或DataContractAttribute放在类型上。

     

最后,可以使用字段模式将类型序列化。所有领域,都   公共和私有,被序列化并且属性被忽略。这个   可以通过在具有以下类型的类型上设置MemberSerialization.Fields来指定   JsonObjectAttribute或通过使用.NET SerializableAttribute和   将DefaultContractResolver上的IgnoreSerializableAttribute设置为   错误。