在 C# 中从 Json 字典序列化字典

Serialize Dictionary in C# from Json Dictionary

如何在 JSON 中定义一个可以在 C# 中解析的字典?

这是我需要解析的 Json:

  "InputRequest": 
        {
            "Switches":  {"showButton": true}
        }

这是我的例子:

 public class InputRequest
{
    [JsonProperty(PropertyName="Switches")]
    public ReadOnlyDictionary<string, bool> Switches { get; }
}

由于某种原因,它无法解析,它显示 Switches 参数的 null 值。

我的另一种方法是创建一个新参数并将字典作为字符串:

 public class InputRequest
{
    [JsonProperty(PropertyName="Switches")]
    public string Switches { get; }

    public ReadOnlyDictionary<string, bool> SwitchesDictionary 
    {
          var values = JsonConvert.DeserializeObject<ReadOnlyDictionary<string, bool>>(Switches);
          return values;
    }
}

对于这种方法,它显示错误

Unexpected character encountered while parsing value for Switches

我哪里做错了?

您正在使用 read-only 集合,但您没有提供 setter。

要么将您的集合类型更改为正常的 Dictionary<string,bool> 并将其初始化为反序列化器可以添加内容的集合,要么将 set; 添加到您的 属性 所以反序列化器可以将值设置为它创建的新集合。

public ReadOnlyDictionary<string, bool> Switches { get; set; }

public IDictionary<string, bool> Switches { get; } = new Dictionary<string, bool>();

JSON.NET 查找“Switches”,但您可能正在查找“InputRequest.Switches”。尝试将“Switches”对象放在全局 space 中,如下所示:

{
   "Switches":  
   {
       "showButton": true
   }
}

然后,您可以将 JSON 字符串反序列化为 InputRequest 对象,如下例所示:

string json = "{\"Switches\": { \"showButton\": true } }";
var myObject = JsonConvert.DeserializeObject<InputRequest>(json);

更新:

你的ReadOnlyDictionary<string, bool>没有setter,你需要像这样添加一个setter:

public ReadOnlyDictionary<string, bool> Switches { get; set; }