gpt4 book ai didi

c# - C#中使用反射反序列化Json

转载 作者:行者123 更新时间:2023-11-30 19:24:10 25 4
gpt4 key购买 nike

我想通过使用 Newtonsoft.Json 的反射来使用以下方法:

MyType object = JsonConvert.DeserializeObject<MyType>(jsonString);

这是我的方法行不通(歧义匹配异常):

Type type = Type.GetType("MyType",false);
Type JSONCovert = typeof(JsonConvert);
MethodInfo deserializer = JSONCovert.GetMethod("DeserializeObject", new Type[] { typeof(String) });
deserializer = deserializer.MakeGenericMethod(type);
var o = deserializer.Invoke(null, new object[] { JsonString });

最佳答案

你得到模糊匹配异常,因为JsonConvert中有两种方法,它们与您提供的名称和参数类型相匹配。它们是:

  • public static object DeserializeObject(string value)
  • public static T DeserializeObject<T>(string value)

您必须更加具体才能选择正确的方法。不幸的是,您将无法使用 GetMethod 来做到这一点。 - 相反,您将不得不扫描方法列表并确定正确的方法。你可以这样做:

    var JSONCovert = typeof(JsonConvert);
var parameterTypes = new[] { typeof(string) };
var deserializer = JSONCovert.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Where(i => i.Name.Equals("DeserializeObject", StringComparison.InvariantCulture))
.Where(i => i.IsGenericMethod)
.Where(i => i.GetParameters().Select(a => a.ParameterType).SequenceEqual(parameterTypes))
.Single();

编辑:我可以澄清的另一件事是:记住你的方法将导致 o类型 object .您将无法将其转换为 MyType在编译时。

关于c# - C#中使用反射反序列化Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com