標籤:
[DataContract] public class pcc { [DataMember] public string Name { get; set; } } public class ccc : pcc { public string cName { get; set; } }
由於 pcc 定義了 DataContract ,所以要求下面的所有屬性要定義 DataMember 才能進行序列化。否則按 IgnoreDataMember 處理。
修改源碼
類:JsonTypeReflector.GetObjectMemberSerialization 想辦法讓它返回 MemberSerialization.OptOut
類: DefaultContractResolver 增加欄位
public MemberSerialization DefaultMemberSerialization = MemberSerialization.OptIn;
public static MemberSerialization GetObjectMemberSerialization(DefaultContractResolver resoler, Type objectType, bool ignoreSerializableAttribute) { JsonObjectAttribute objectAttribute = GetJsonObjectAttribute(objectType); if (objectAttribute != null) return objectAttribute.MemberSerialization;#if !PocketPC && !NET20 DataContractAttribute dataContractAttribute = GetDataContractAttribute(objectType); if (dataContractAttribute != null) { return resoler.DefaultMemberSerialization; }#endif#if !(SILVERLIGHT || NETFX_CORE || PORTABLE) if (!ignoreSerializableAttribute) { SerializableAttribute serializableAttribute = GetSerializableAttribute(objectType); if (serializableAttribute != null) return MemberSerialization.Fields; }#endif // the default return MemberSerialization.OptOut; }
初始化:
jSetting.ContractResolver = new DefaultContractResolver
{
DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.Public,
SerializeCompilerGeneratedMembers = true,
DefaultMemberSerialization = MemberSerialization.OptOut
};
Json.Net 序列化問題