在 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; }
如何在 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; }