C# Unity3d-json.net-如何重写GetSerializableMember方法?

C# Unity3d-json.net-如何重写GetSerializableMember方法?,c#,unity3d,json.net,C#,Unity3d,Json.net,在最新版本的JSON.NET for Unity3D上,我收到以下编译器警告消息: [CS0618] `Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags' is obsolete: `DefaultMembersSearchFlags is obsolete. To modify the members serialized inherit from DefaultContractRes

在最新版本的JSON.NET for Unity3D上,我收到以下编译器警告消息:

[CS0618] `Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags' is obsolete:
`DefaultMembersSearchFlags is obsolete. To modify the members serialized inherit from DefaultContractResolver and override the GetSerializableMembers method instead.'
该方法的签名为:

protected virtual List<MemberInfo> GetSerializableMembers(Type objectType)
是否存在此方法的工作覆盖示例?谷歌让我失望了

以下是我迄今为止通过反向工程对DefaultMembersSearchFlags的当前使用情况所做的尝试:

私有类ContractResolver:DefaultContractResolver{
覆盖受保护列表GetSerializableMembers(类型objectType){
BindingFlags DefaultMembersSearchFlags=BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
返回ReflectionUtils.GetFieldsAndProperties(objectType,DefaultMembersSearchFlags)
.Where(m=>!ReflectionUtils.IsIndexedProperty(m)).ToList();
}
}

问题是ReflectionUtils似乎无法从当前的JSON.NET包中导入,并且在“容易”的情况下滚动我自己的版本,听起来像是一条兔子路线。。。对吗?

你为什么要这样做?你不需要用这个。在5.3中有一个内置于Unity中的示例……可以找到这个示例,主要是因为,正如您的链接所示,JsonUtility是一个轻量级的JSON解析功能,其功能与想象中的一样,没有完整的JSON.NET库的功能。只要你需要对JSON做任何复杂的事情(比如我的问题),Unity的JsonUtility的局限性就会变得明显。是的,是的,现在对
JsonUtility
有一个局限性。我还想让您知道,我看到过在iOS设备上,
JSON.NET
崩溃的实例<就我而言,code>JsonUtility从未在任何人身上崩溃过。您正在做的哪些事情只能通过
JSON.NET
来完成?JSON.NET既不太短,也不想让您的评论无人回答,它始终是Unity Asset Store中支付金额最高的资产之一,拥有数百条五星评论。我们已经在iOS上使用了多年,没有任何问题。我真的只是在寻找我上述问题的答案,因为我们已经远远超出了争论图书馆本身的使用是一个值得讨论的问题。你为什么要这样做?你不需要用这个。在5.3中有一个内置于Unity中的示例……可以找到这个示例,主要是因为,正如您的链接所示,JsonUtility是一个轻量级的JSON解析功能,其功能与想象中的一样,没有完整的JSON.NET库的功能。只要你需要对JSON做任何复杂的事情(比如我的问题),Unity的JsonUtility的局限性就会变得明显。是的,是的,现在对
JsonUtility
有一个局限性。我还想让您知道,我看到过在iOS设备上,
JSON.NET
崩溃的实例<就我而言,code>JsonUtility从未在任何人身上崩溃过。您正在做的哪些事情只能通过
JSON.NET
来完成?JSON.NET既不太短,也不想让您的评论无人回答,它始终是Unity Asset Store中支付金额最高的资产之一,拥有数百条五星评论。我们已经在iOS上使用了多年,没有任何问题。我真的只是在寻找我上述问题的答案,因为我们已经远远超出了争论图书馆本身的使用是一个值得讨论的问题的范围。
contractResolver = new DefaultContractResolver() {
  DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic
};
private class ContractResolver : DefaultContractResolver {
    override protected List<MemberInfo> GetSerializableMembers(Type objectType) {
      BindingFlags DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
      return ReflectionUtils.GetFieldsAndProperties(objectType, DefaultMembersSearchFlags)
                            .Where(m => !ReflectionUtils.IsIndexedProperty(m)).ToList();
    }
}