假设有关文档的信息存储在条形码中,并且信息的结构根据文档的类型而变化。但是文件的类型事先未知。条形码告诉我们我们正在处理哪种文件:
条形码值不会存储如下分隔的字符串:
author|date|subject
author|date|subject|approvedby1;approvedby2
但将包含json表示法:
FOO|{"author": "Smokey", "date": "01/01/2015", "subject": "widgets"}
GOO|{"author": "Smokey", "date": "01/01/2015", "subject": "widgets", "approvals": ["Mike","Jane"]}
当我们获取条形码文本数据时,我们从
|
分隔符左侧的值看到需要实例化FOO
或GOO
。我们获取|
右侧的字符串,并将其提供给JsonConvert
。如何告诉
JsonConvert.DeserializeObject<some type>
从其json表示形式返回GOO对象? var myGoo = JsonConvert.DeserializeObject<?>(jsonStringGOO)
尖括号
< >
之间是什么?编辑:理想情况下,无需诉诸switch语句。
假设当前名称空间包含所有可能类型的类定义。
最佳答案
如何尝试使用反射获取装配体的类型
var data = input.Split('|');
var assembly = Assembly.LoadFrom("MyDll.dll");
var myType = assembly.GetType("My.Namespace." + data[0]); // GOO / BAR / etc
JsonConvert.DeserializeObject(data[1], myType)
Assembly.GetType(string name)
JsonConvert.DeserializeObject(string value, Type type)
N.B.为了进行调试,您可以使用如下代码获取类型的全名
var t = typeof(Goo);
Debug.WriteLine(t.FullName);