在嵌套对象上使用 JsonConvert.DeserializeObject

本文关键字:JsonConvert DeserializeObject 嵌套 对象 | 更新日期: 2023-09-27 18:33:11

我想在加载应用程序时使用 JSON.Net 来处理解析配置文件。将所有KVP保持在相同的范围内绝对可以。但是,我想将其分解为子类别,例如Settings.WebServer,Settings.GameServer等。

为了便于阅读,我希望能够以这种方式引用各种设置,例如Settings.WebServer.hostname。目前试图将WebServer/GameServer考虑在内正在抛弃这一点。任何人都可以帮助做些什么来使其工作?

杰伦

{
    "webserver":
    {
        "hostname": "localhost",
        "port": "8888"
    },
    "gameserver":
    {
        "hostname": "123.123.123.123",
        "port": "27015",
        "password": "as@c!qi$"
    }
}

C# 主

Settings settings = JsonConvert.DeserializeObject<Settings>(File.ReadAllText(@".'Configs'settings.cfg"));

C# 设置类

namespace SourceMonitor
{
    public class Settings
    {
        public class Webserver
        {
            [JsonProperty("hostname")]
            public string hostname { get; set; }
            [JsonProperty("port")]
            public string port { get; set; }
        }
        public class Gameserver
        {
            [JsonProperty("hostname")]
            public string hostname { get; set; }
            [JsonProperty("port")]
            public string port { get; set; }
            [JsonProperty("password")]
            public string password { get; set; }
        }
        public class RootObject
        {
            [JsonProperty("webserver")]
            public Webserver webserver { get; set; }
            [JsonProperty("gameserver")]
            public Gameserver gameserver { get; set; }
        }
    }
}

在嵌套对象上使用 JsonConvert.DeserializeObject

您正在尝试序列化/反序列化没有任何属性的设置类,对于您创建的结构,您必须序列化/反序列化类 RootObject。

如果要使用 Settings 类,请将其更改为:

    namespace SourceMonitor
    {
        public class Settings
        {
            public class Webserver
            {
                [JsonProperty("hostname")]
                public string hostname { get; set; }
                [JsonProperty("port")]
                public string port { get; set; }
            }
            public class Gameserver
            {
                [JsonProperty("hostname")]
                public string hostname { get; set; }
                [JsonProperty("port")]
                public string port { get; set; }
                [JsonProperty("password")]
                public string password { get; set; }
            }
            [JsonProperty("webserver")]
            public Webserver webserver { get; set; }
            [JsonProperty("gameserver")]
            public Gameserver gameserver { get; set; }
        }
    }