[英]System.Text.Json can't deserialize an object with an array of objects?
I have a json structure that looks like this:我有一个 json 结构,如下所示:
{
"SystemType": "SingleDevice",
"Devices":
[
{
"DeviceSettings":{
"DeviceType": "Blah",
"Generates": 4,
"RAdd": 10,
"TAdd": 10,
"Distance": 1,
"IpAddress": "192.168.0.21",
"Port": 50002
}
}
]}
I then have two classes that looks like this:然后我有两个看起来像这样的类:
DeviceSettings.cs设备设置.cs
public class DeviceSettings
{
public string DeviceType { get; set; }
public int Generates { get; set; }
public double RAdd{ get; set; }
public double TAdd { get; set; }
public double Distance { get; set; }
public string IpAddress { get; set; }
public int Port { get; set; }
}
SystemSettings.cs系统设置.cs
public class SystemSettings
{
public string SystemType { get; set; }
public DeviceSettings[] Devices { get; set; }
}
When I debug the following code and look at the locals, the resulting object that gets returned exists but with some issues.当我调试以下代码并查看局部变量时,返回的结果 object 存在但存在一些问题。 The SystemType properly displays "SingleDevice", and Devices indicates it's an array of size=1, and provides element 0, but when I look the actual values for everything, they are either null or 0. Specifically, DeviceType and IpAddress = null, everything else is 0. Can anyone explain why and how to get around this?
SystemType 正确显示“SingleDevice”,Devices 表示它是一个大小为 1 的数组,并提供元素 0,但是当我查看所有内容的实际值时,它们要么是 null 要么是 0。具体来说,DeviceType 和 IpAddress = null,所有内容否则为 0。谁能解释为什么以及如何解决这个问题?
static void Main(string[] args)
{
var configFilePath = @"C:\Users\Public\Documents\myFolder\SystemConfiguration.json";
var config = System.IO.File.ReadAllText(configFilePath);
Console.WriteLine(config);
var systemSettings = JsonSerializer.Deserialize<SystemSettings>(config);
Console.ReadKey();
}
I've seen posts talking about inferred types, but I believe everything is explicit here.我看过讨论推断类型的帖子,但我相信这里的一切都是明确的。 I'm not quite sure what's going on.
我不太确定发生了什么。
You are missing an object to hold the DeviceSettings
property:您缺少 object 来保存
DeviceSettings
属性:
public class SystemSettings
{
public string SystemType { get; set; }
public Device[] Devices { get; set; } // <-- change this
}
// Add this
public class Device
{
public DeviceSettings DeviceSettings { get; set; }
}
public class DeviceSettings
{
//snip
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.