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

从Json字典序列化C#中的字典,c#,json,getter-setter,json-serialization,C#,Json,Getter Setter,Json Serialization,如何用JSON定义一个可以用C#解析的字典 下面是我需要解析的Json: "InputRequest": { "Switches": {"showButton": true} } 下面是我的例子: public class InputRequest { [JsonProperty(PropertyName="Switches")] p

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

下面是我需要解析的Json:

  "InputRequest": 
        {
            "Switches":  {"showButton": true}
        }
下面是我的例子:

 public class InputRequest
{
    [JsonProperty(PropertyName="Switches")]
    public ReadOnlyDictionary<string, bool> Switches { get; }
}
对于这种方法,它显示了

分析开关的值时遇到意外字符


我在这里做错了什么?

您使用的是只读集合,但没有提供setter

将集合类型更改为普通的
字典
,并将其初始化为反序列化程序可以向其中添加内容的集合,或者添加一个
集合
设置为属性,以便反序列化程序可以将值设置为它创建的新集合

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

公共IDictionary开关{get;}=new Dictionary();
JSON.NET查找“Switches”,但您可能正在查找“InputRequest.Switches”。尝试在全局空间中放置“开关”对象,如下所示:

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

string json = "{\"Switches\": { \"showButton\": true } }";
var myObject = JsonConvert.DeserializeObject<InputRequest>(json);
string json=“{\”开关\“:{\”显示按钮\“:true}”;
var myObject=JsonConvert.DeserializeObject(json);
更新: 您的
ReadOnlyDictionary
没有设置器,您需要添加如下设置器:

public ReadOnlyDictionary开关{get;set;}
string json = "{\"Switches\": { \"showButton\": true } }";
var myObject = JsonConvert.DeserializeObject<InputRequest>(json);
public ReadOnlyDictionary<string, bool> Switches { get; set; }