【发布时间】:2019-07-04 11:16:31
【问题描述】:
在 c# 中使用带有以下 nuget 包的 winforms
WindowsAPICodePack-Shell //used for old style folder dialog
Newtonsoft.Json
我有一个具有以下结构的文件文件夹
{
"modelName": "3K05",
"Fridge":
{
"color" : "white",
"comment" : "sell at discount",
"version" : 1,
"date" : 20171102,
"features" : 264,
"purpose" : "Generic",
"format" : [1,5,10,0],
"build" : [[0,0,0,0,0,0],
[22,0,0,20,0,0],
[0,30,0,0,0,0],
[26,0,0,31,0,90],
[0,0,33,0,0,0], ]
}
}
然后我尝试使用以下代码解析以获取一些信息
foreach (string filename in Directory.GetFiles(dialog.FileName))
{
if (Path.GetExtension(filename) == ".APP") //name of json files
{
using (StreamReader r = new StreamReader(filename)) //read infile
{
dynamic array = JsonConvert.DeserializeObject(r.ReadToEnd()); //put into json array
foreach (var item in array) //parse thru array
{
if (item.modelName != null) listBox1.Items.Add(item.modelName); else listBox1.Items.Add("empty"); // get modelName
if (item.Fridge != null) listBox1.Items.Add(item.Fridge.color); else listBox1.Items.Add("empty"); //get color
if (item.Fridge != null) listBox1.Items.Add(item.Fridge.format); else listBox1.Items.Add("empty"); //get the string inside []
if (item.Fridge != null) listBox1.Items.Add(item.Fridge.build); else listBox1.Items.Add("empty"); //get second item as string [[ ] [ 2nd]]
}
}
}
}
第一个问题是,除非我将数据括在方括号 [] 中,否则我无法进行任何工作。那么如何在没有方括号的情况下使其工作呢?
我的工作数据是
[
{
"modelName": "3K05",
"Fridge":
{
"color" : "white",
"comment" : "sell at discount",
"version" : 1,
"date" : 20171102,
"features" : 264,
"purpose" : "Generic",
"format" : [1,5,10,0],
"build" : [[0,0,0,0,0,0],
[22,0,0,20,0,0],
[0,30,0,0,0,0],
[26,0,0,31,0,90],
[0,0,33,0,0,0], ]
}
}
]
第二个问题是我现在如何从构建和格式中获取信息。从构建中我希望能够将第二项作为字符串获取?
22,0,0,20,0,0
目前它以收藏的形式出现。如果有返回白色的 Fridge.color,我可以看到如何进入第一个,但是我如何进入 Fridge.build.?
我是如何让我的工作得到答案的,所以感谢所有回答的人。
我学习了 VS 的一个新部分,即编辑 -> 选择性粘贴 -> 将 Json 粘贴为类
然后我把它当作
var myObject = JsonConvert.DeserializeObject<Rootobject>(File.ReadAllText(@filename));
myObject.xxxx.yyyyy;
xxxx = Json 类的 Rootobject 实例 yyyy = Json 类中的项目。我就是这么理解的,但我用的词可能不正确。
这样做还向我展示了构建信息只是一个二维数组,我很乐意使用它。
再次感谢这个网站,我学到了更多关于 C# 的知识
【问题讨论】:
-
对于您的第一个问题,您的 JSON 无效,请将 [0,0,33,0,0,0], 替换为 [0,0, 33,0,0,0]。另外,请不要使用 dynamic ,请阅读 documentation 如果您将 json 映射到类中,这将帮助您解决第二个问题,您可以使用 this tool 轻松做到这一点(编辑)如果您构建结构如何工作,您可以将其映射到另一个子类
-
第一个问题:您正在使用 foreach 遍历您的动态对象,因此它需要来自 json 的数组,因此您必须将 json 包装在 [ ] 括号内。