【发布时间】:2015-06-23 16:09:08
【问题描述】:
我搜索了类似的问题,但找不到任何与我正在寻找的内容完全匹配的内容。
C# 新手,请多多包涵。
我有一些我正在反序列化的 json 文件。我希望文件反序列化为正确类型的对象,而不必事先定义类型。这是我的代码:
public class loadJson
{
//path of the file location
public void readJson(string path)
{
//array of files at the path location. right now just reading one file
FileInfo[] files = new DirectoryInfo(path).GetFiles("seleniumExample.json").ToArray();
foreach (FileInfo fi in files)
{
dynamic b1 = null;
using (StreamReader file = new StreamReader(fi.FullName))
{
string fileText = file.ReadToEnd();
//Console.WriteLine(fileText);
try
{
b1 = Newtonsoft.Json.JsonConvert.DeserializeObject(fileText);
}
catch(Exception e)
{
Console.WriteLine("ERROR!!!! " + e.ToString());
}
file.Close();
}
}
}
}
我有一堆对象类型,我将通过 json 文件将它们输入我的程序。
我不想将 b1 显式称为投标、客户或任何其他特定的预定义类。如果我明确地将 b1 称为投标,它会很好地加载所有信息并填写正确的实例变量。
但是当我使用“动态”或一般“对象”时,它无法弄清楚,只是初始化为“对象”。
有没有办法执行通用反序列化并让它根据 json 文件中定义的字段创建正确类的对象?
提前感谢您的帮助,如果我的问题非常不清楚,我深表歉意。如果是这样,请告诉我如何帮助消除任何歧义。再次感谢。
【问题讨论】:
-
Is there a way to perform generic deserialization and have it create an object of the correct class based on the fields defined in the json file?假设 Json.Net 猜到了 正确 类并返回了该对象。您将如何在代码中使用它?在编写代码时,您仍然不知道b1的类型。 -
所以,我的想法是这样的:我认为我可以这样做以通用方式,不必重用太多代码。这没有意义吗?再说一次,我是 c# 和软件开发的新手,所以我对这可能不是最好的方法持开放态度。
-
你有能力控制 JSON 文件的格式和内容吗?或者它们是给定的?
-
我有能力控制格式和内容。
-
目录下的所有JSON文件是否都存储了相同类型的对象?
标签: c# json serialization deserialization