我有一个json文件(文本),它有908行数据,有多种硬件类类型。
每个分组都有这些,其中属性根据组件类型而变化。
"HardwareID": "ACPI\\AuthenticAMD_-_AMD64_Family_16_Model_4",
"Count": "8",
"Class": "Processor",
"Properties": { }
"DeviceType": "Cpu",
"Description": "Quad-Core AMD Opteron(tm) Processor 2373 EE"
我认为第一部分是公共类(即设备),它分解了json文件的结构。它是否正确?如果是这样,我该如何添加属性?
然后加载后,我可以按以下方式反序列化对象。
Devices device = JsonConvert.DeserializeObject<Devices>(json);
我在正确的道路上吗?这是我的计划,因为我加载了不同的类[即]处理器,硬盘驱动器等]将它们加载到特定的DataTable中。完成文件评估后,将不同的DataTable输出到csv文件。这将使我能够评估不同的组件。
namespace jsonReader
{
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Newtonsoft.Json;
[DataContract]
public class RootObject
{
public class Devices
{
public string HardwareId { get; set; }
public int Count { get; set; }
public string Class { get; set; }
public IList<string> Properties { get; set; }
public string DeviceType { get; set; }
public string Description { get; set; }
}
}
这是我的json文件的样子。
{
"Devices": [
{
"HardwareID": "ACPI\\AuthenticAMD_-_AMD64_Family_16_Model_4",
"Count": "8",
"Class": "Processor",
"Properties": {
"CPUIDBrandString": "Quad-Core AMD Opteron(tm) Processor 2373 EE",
"CPUIDString": "AuthenticAMD",
"CPUIDMultithreading": "1",
"CPUIDBrandID": "0",
"CPUIDExtFamily": "1",
"CPUIDExtModel": "0",
"CPUIDSteppingID": "2",
"CPUIDNumberOfCores": "0",
"CPUIDLogicalCPUCount": "4",
"CPUIDFamily": "15",
"CPUIDVMExt": "0",
"CPUCount": "8",
"CPUIDProcessorID": "1696726757271408450",
"IsNuma": "true",
"CPUIDType": "0",
"Cpu_Temperature": "0.000000",
"CPUIDCapable64bit": "1",
"CPUIDModel": "4"
},
"DeviceType": "Cpu",
"Description": "Quad-Core AMD Opteron(tm) Processor 2373 EE"
},
],
}
答案 0 :(得分:2)
我认为第一部分是公共类(即设备),它分解了json文件的结构。这是对的吗?
是的。基本上你会创建一个代表你的Josn的class
。
如果是,我该如何添加属性?
您案例中的Properties
本身就是class
,因此您应该创建一个代表它的class
。
所以你的课程将如下所示:
public class RootObject
{
public Device[] Devices { get; set; }
}
public class Device
{
public string HardwareID { get; set; }
public string Count { get; set; }
public string Class { get; set; }
public Properties Properties { get; set; }
public string DeviceType { get; set; }
public string Description { get; set; }
}
public class Properties
{
public string CPUIDBrandString { get; set; }
public string CPUIDString { get; set; }
public string CPUIDMultithreading { get; set; }
public string CPUIDBrandID { get; set; }
public string CPUIDExtFamily { get; set; }
public string CPUIDExtModel { get; set; }
public string CPUIDSteppingID { get; set; }
public string CPUIDNumberOfCores { get; set; }
public string CPUIDLogicalCPUCount { get; set; }
public string CPUIDFamily { get; set; }
public string CPUIDVMExt { get; set; }
public string CPUCount { get; set; }
public string CPUIDProcessorID { get; set; }
public string IsNuma { get; set; }
public string CPUIDType { get; set; }
public string Cpu_Temperature { get; set; }
public string CPUIDCapable64bit { get; set; }
public string CPUIDModel { get; set; }
}
请注意,您不需要使用DataContract
属性,并且需要编写反序列化Json(使用Json.NET):
Devices device = JsonConvert.DeserializeObject<RootObject>(json);
作为提示,您可以使用Visual Studio
(2012年)编辑&gt;轻松创建这些数据类。选择性粘贴&gt;将JSON粘贴为类菜单项。只需将您的Json字符串数据复制到剪贴板(Ctrl + C),然后使用Paste Special。