Reputation: 248
I have a json structure that looks like this:
{
"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
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
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. 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?
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.
Upvotes: 4
Views: 2371
Reputation: 118987
You are missing an object to hold the DeviceSettings
property:
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
}
Upvotes: 3