首页 > 解决方案 > JsonConvert.DeserializeObject 返回空值

问题描述

我进行了搜索,但似乎没有找到任何解决方案...这是我的示例 Json:

{
  "WSettings":{
  "Message":"\"We are the universe's way of experiencing itself.\"<br/>- Kurzgesagt -",
  "universalMessageProcChance":10,
  "Hi":{
         "altName":"Hi",
         "normalState":"hi",
         "hState":"hi_h",
         "aState":"hi_a",
         "background":"bg_owo_r",
         "stateLayout":4,
         "backgroundLayout":1,
         "eventMessage":"Da"
     },
  "Yu":{
         "altName":"Al",
         "normalState":"al",
         "hState":"al_h",
         "aState":"ali_a",
         "background":"bg_owo_b",
         "stateLayout":4,
         "backgroundLayout":1,
         "eventMessage":"Da"
    }
  }
}

这是我的课:

public class WSettings
{
    public string Message { get; set; }
    public int universalMessageProcChance { get; set; }

    [JsonProperty("Hi")]
    public StateW Hi { get; set; }

    [JsonProperty("Yu")]
    public StateW Yu { get; set; }
}

public class StateW
{
    public string altName { get; set; }
    public string normalState { get; set; }
    public string hState { get; set; }
    public string aState { get; set; }
    public string background { get; set; }
    public int stateLayout { get; set; }
    public int backgroundLayout { get; set; }
    public string eventMessage { get; set; }
}

这要反序列化:

var w = Newtonsoft.Json.JsonConvert.DeserializeObject<WSettings>(File.ReadAllText(@"json.txt"));

它将所有属性返回为空。老实说,我不知道那里出了什么问题,所以请原谅我的无知。任何帮助都可以得到 :)

标签: c#json

解决方案


您将需要 WSettings 上的另一个包装类。
尝试这样的事情:

public class WSettingsParent
{
    public WSettings WSettings { get; set; }
}

并像这样反序列化:

WSettingsParent myDeserializedClass = JsonConvert.DeserializeObject<WSettingsParent>(File.ReadAllText(@"json.txt")));

这是一个有用的工具,用于检查您是否可以使用它来确保正确设置类的结构:
https
://json2csharp.com/ 只需将您的 json 粘贴到左侧,它就会相应地生成类。(您可能需要一些细微的修改,但大图在那里可见)。


推荐阅读