【问题标题】:deserialize part of json string (array) in c#在c#中反序列化部分json字符串(数组)
【发布时间】:2016-05-19 22:24:29
【问题描述】:

我有一个这样的 json 字符串:

{  
"Results":[  
  {  
   "attr1": "value1",
   "attr2": "value2",
   "A": "value_a",
   "B": "value_b",
   "C": "value_c", 
   "GuestValues":[  
        {  
            "A": "value_a",
            "B": "value_b",
            "C": "value_c"
        },
        {  
            "A": "value_a",
            "B": "value_b",
            "C": "value_c"
        },
        {  
            "A": "value_a",
            "B": "value_b",
            "C": "value_c"
        }
}
],
"TotalResults":1,
"MilliSeconds":11
}

我只想反序列化 GuestValues 数组。我创建了一个这样的类:

public class GuestValue
{
    public string A;
    public string B;
    public string C;
}

public class GuestValueResult
{
    public List<GuestValue> GuestValues { get; set; }
    public in TotalResults { get; set; }
}

然后这样称呼它:

GuestValueResult guestValues = JsonConvert.DeserializeObject<GuestValueResult>(jsongString);

但它不起作用。我尝试了很多,一次不知怎么的,它只给我回了jsonString中的第一个"A""B""C",上面那个"GuestValues",我不要那组数据。我只想要"GuestValues" 里面的那些。请帮忙。

【问题讨论】:

  • 您传入的确切 JSON 字符串是什么?为完整的 JSON 字符串编写 JSON 类会更容易,我认为反序列化器不足以检查它可以序列化的字符串的哪一部分并将其返回给您。
  • Deserialize partial JSON的可能重复
  • 您的 JSON 无效。您在结尾 } ], "TotalResults":1, "MilliSeconds":11 } 之前缺少 ]。我认为这是一个错字?

标签: c# json


【解决方案1】:

您可以使用 Linq to JSON(JSON.NET 的一部分)访问相关节点,然后对其进行反序列化:

var root = JObject.Parse(jsonString);
var guestValues = root["Results"][0]["GuestValues"].ToObject<GuestValue[]>();

【讨论】:

  • 其实应该是ToObject&lt;List&lt;GuestValue&gt;&gt; 不是吗? (相对于GuestValueResult
  • @BrianRogers,啊,是的,我把它们弄混了......谢谢
  • 啊,是的,我错过了 JSON 中的数组...已修复
【解决方案2】:

鉴于您有一个未映射的结果数组,我根本不知道您发布的代码如何返回任何有用的值。

你需要创建另一个这样的类

 public class ResultsResult
 {
    public GuestValueResult[] Results { get; set; }
 }

然后使用类进行反序列化

 ResultsResult guestValues = JsonConvert.DeserializeObject<ResultsResult>(jsongString);

然后你会得到你所期望的。

【讨论】:

  • 这行得通,但它让我有 3 个不太酷的课程。我会赞成你的回答。谢谢!
  • 鉴于您现有的代码,我认为这是您想要采取的方向。使用最适合您的方案。谢谢!
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 2018-01-27
相关资源
最近更新 更多