当前位置: 首页 > 编程语言 > C#

使用Json.Net反序列化时,运行时使用System.Type作为share

时间:2023-04-10 13:54:15 C#

使用Json.Net反序列化时,运行时使用System.Type作为运行时我有一个进程需要能够在运行时调用函数以下方式。publicstaticTaskConvert(stringpayload,Typetype){JsonSerializerSettingssettings=newJsonSerializerSettings().Configure();//<---引入扩展方法来处理自定义类型returnJsonConvert.SerializeObject(JsonConvert.DeserializeObject(payload),设置));上面的代码无法编译。接下来,我使用JohnSkeet在2011年对一个与我的问题类似的问题的回答。publicstaticstringConvert(stringpayload,Typetype){JsonSerializerSettingssettings=newJsonSerializerSettings().Configure();//这与方法表中DeserializeObject的另一个重载冲突MethodInfomethod=typeof(JsonConvert).GetMethod("DeserializeObject",new[]{typeof(string)});方法=方法.MakeGenericMethod(类型);对象[]参数=新对象[1];参数[0]=有效负载;字符串结果=(字符串)method.Invoke(null,arguments);返回JsonConvert.SerializeObject(结果,设置);}存在同名重载非泛型和泛型重载,方法表查找失败。我能够通过调用类似于下面的函数(未混淆)来解决这个问题。publicstaticstringConvert(stringpayload,Typetype){JsonSerializerSettingssettings=newJsonSerializerSettings().Configure();//这与方法表中DeserializeObject的另一个重载冲突MethodInfomethod=typeof(TestConverter).GetMethod("TestThis",new[]{typeof(string)});方法=方法.MakeGenericMethod(类型);对象[]参数=新对象[1];参数[0]=有效负载;字符串结果=(字符串)method.Invoke(null,arguments);返回JsonConvert.SerializeObject(结果,设置);}publicstaticTTestThis(strings){returnJsonConvert.DeserializeObject(s);然而,我现在回到了我的自定义转换扩展方法被忽略的地方,因为反序列化器忽略了我的类型。这可能吗。当然,我可以使用反序列化版本,例如:objectresult=JsonConvert.DeserializeObject(payload);但是,我的做法是使用JsonConvert.DeserializeObject(payload)重载,以便我可以调用我的转换器。有小费吗?你不需要跳过篮球。JsonConvert.DeserializeObject有一个接受类型的非泛型重载。以上就是C#学习教程:使用Json.Net反序列化时,使用System.Type作为运行时分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticTaskConvert(stringpayload,Typetype){JsonSerializerSettingssettings=newJsonSerializerSettings().Configure();//本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: