[c#]序列化 Json 字符串对象 caseinsensitive

标签: json Linq C#
发布时间: 2017/2/28 22:13:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图读取 Json 字符串不应区分大小写

dynamic result = JsonConvert.DeserializeObject(response);
for (int i = 0; i < ((Newtonsoft.Json.Linq.JArray)result).Count; i++)
{
   Group.id = (string)result[i]["id"];
   Group.name = (string)result[i]["GroupName"];
   ...
   ...

我想要的标记是大小写不敏感。我是如何做到这一点的?我用过

    Group.id = (string)((JObject )result[i].GetValue("ID",StringComparison.CurrentCultureIgnoreCase));

但我得到一个错误 'Newtonsoft.Json.Linq.JObject' 不包含定义为 'GetValue'。

Json 是︰

{[
   {
     "id": "1",
     "State": "ON",
     "Override": "ON",
     "Lightoutput": 80,
     "GroupName": "new name for group 1"
   },
   {
     "id": "2",
     "State": "ON",
     "Override": "OFF",
     "Lightoutput": 100,
     "GroupName": "group 2"
   }
]}

解决方法 1:

它看起来像你有 Group 类。假设它看上去有点像这样︰

public class Group
{
    public int Id { get; set; }

    public string State { get; set; }

    public string Override { get; set; }

    public int LightOutput { get; set; }

    public string GroupName { get; set; }
}

你只可以反序列化您直接到数组 List<Group> :

var groups = JsonConvert.DeserializeObject<List<Group>>(json);

然而,如果你真的想要使用 JObjectJArray 由于某种原因,你应该只是使用 JArray.Parse 和避免 dynamic :

JArray arr = JArray.Parse(json);

for(int i = 0; i < arr.Count; i++)
{
    var obj = arr[i].ToObject<JObject>();

    int id = (int)obj.GetValue(
        "ID", StringComparison.CurrentCultureIgnoreCase);
}
赞助商