[英]How to deserialize a json file with multidimensional array to convert it to object in c#
[英]How to deserialize JSON file to C# object by section
我有 2 个 C# class:
public class Light
{
public int Brightness { get; set; }
public string Mode { get; set; }
}
public class AirConditioner
{
public int Temperature{ get; set; }
public string Mode { get; set; }
}
JSON 文件格式:
{
"Light": {
"Brightness": 5,
"Mode": "On"
},
"AirConditioner": {
"Temperature": 25,
"Mode": "Cooling"
}
}
我想按部分将 JSON 文件解析为 C#,如下所示:
var light = JsonDeserialize<Light>.(FileSection["Light"]);
var aircon = JsonDeserialize<AirConditioner>.(FileSection["AirConditioner"]);
我想要的和 Asp.Net Core 配置工作一样:
var light = new Light();
Configuration.GetSection("Light").Bind(light);
如果我不需要安装其他软件包会更好。
更新:问题是如何获取 JSON 文件的一部分。 如果我能得到这样的Light部分:
var lightString = JsonFile.GetSection("Light");
然后我可以简单地使用System.Text.Json命名空间反序列化:
var light = JsonSerializer.Deserialize<Light>(lightString);
我通过创建一个包含 Light 和 AirConditioner 属性的父 class 来做到这一点。
父 Class:
public class Devices
{
public Light Light {get;set;}
public AirConditioner AirConditioner {get;set;}
}
然后您可以反序列化到设备中并访问灯和空调。
var devices = JsonDeserialize<Devices>.(myjsonfilecontent);
var light = devices.Light;
var aircon = devices.AirConditioner;
我认为您正在 Newtonsoft 的 JSON.Net 中寻找https://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm
它允许将整个 JSON object 操作为非常通用JOBject
并仅定位和转换您需要的部分。
在您的示例中,这类似于以下内容。 此代码使用newtonsoft.json
package。
using System;
using Newtonsoft.Json.Linq;
namespace SO_67293726
{
public class Light
{
public int Brightness { get; set; }
public string Mode { get; set; }
}
public class AirConditioner
{
public int Temperature { get; set; }
public string Mode { get; set; }
}
class Program
{
public static string JsonString =>
@"{
""Light"": {
""Brightness"": 5,
""Mode"": ""On""
},
""AirConditioner"": {
""Temperature"": 25,
""Mode"": ""Cooling""
}
}";
static void Main(string[] args)
{
var jobject = JObject.Parse(JsonString);
var light = jobject["Light"].ToObject<Light>();
var aircon = jobject["AirConditioner"].ToObject<AirConditioner>();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.