c# - 反序列化从类型参数中的字符串名称引用类型的 JSON

标签 c# json

var custsType = Type.GetType("Customers");          
var customers = Json.Deserialize<custsType>(data);
这显然失败了。如何通过字符串名称引用类以便在运行时提供它?
另外,我需要能够访问实际的强类型对象,而不是它的字符串表示形式。

最佳答案

var custsType = Type.GetType("Customers");          
var customers = JsonConvert.DeserializeObject(data, custsType);
问题是如果对象的类型不确定,您将很难使用它。大概类型名称是一个参数,否则你会刚刚完成
var customers = JsonConvert.DeserializeObject<Customers>(data);
它表明在编译时你不知道你期望它返回什么类型。问题在于,如果您在编译时不知道该类型,则不清楚一旦获得该对象可以对它做什么。
如果您打算访问对象的任何属性,那么您必须预先假设对象的类型是什么。否则,您不会期望反序列化的对象具有该属性。
挑战不在于如何解决问题,而在于如何重新考虑方法,以便您从一开始就不会遇到问题。
理想情况下,您想知道您在编译时期望的类型,它会再次如下所示:
var customers = JsonConvert.DeserializeObject<Customers>(data, custsType);
然后,如果数据无法反序列化为预期类型,则会引发异常,因为调用方必须传递正确的类型。
如果您发现自己处于以下情况:a) 不知道类型是什么,或 b) 必须使用反射来查找属性,则说明出了点问题,最好先备份,直到可以解决该问题。

尝试访问这样的属性:
var name = myObject["Name"];
比反射更容易,但它最终与反射相同
var property = myObject.GetType().GetProperty("Name");
var name = property.GetValue(myObject);
在这两种情况下,您都不知道是否会有“名称”属性。无论将对象解析为 JSON,都只是在幕后使用反射。

关于c# - 反序列化从类型参数中的字符串名称引用类型的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47102107/

相关文章:

json - @XmlInverseReference 注释不起作用

c# - ASP.NET - 动态更改样式表

c# - 从 Web 方法内部查找应用程序路径

c# - TextBlock 不更新内容

c# - 为什么在匿名类型中使用 Getter?

javascript - 如何使用 Javascript 和 HTML 将链接嵌入到表中的值中

c# - RavenDb - 递归查询/索引,用于分层文档

json - 设置 package.json 默认值

json - Golang 解码 map[string]float 其中 float 被编码为字符串

json - 使用 sqlite3、nodejs 从数据库存储、检索、解析 JSON 对象的正确方法