从动态JSON属性中获取值 C#

4

我正在使用WCF工作,想要按日期获取记录列表数组,并且需要将具有相同记录的日期作为数组键,就像下面这样:

{  
   "EventAppGetAllSessionByCustomerIdResult":{  
      "02/22/2017":[  
         {  
            "SessionDate":"02/22/2017"
         }
      ],
      "08/27/2016":[  
         {  
            "SessionDate":"08/27/2016"
         }
      ],
      "Status":{  
         "Description":"Successfull!",
         "Status":1
      }
   }
}

基本上,我想提取 SessionDate 的值。

我将您的问题更新为更通用的形式,因为它与 JSON / C# 相关,而不是直接与 WCF 相关。请确认这是否正确。 - kat1330
2个回答

5
我假设您想从JSON中提取"SessionDate"属性。我建议使用JObject.Parse()方法。
JObject jObject = JObject.Parse(json);
var result = (JObject)jObject["EventAppGetAllSessionByCustomerIdResult"];

var dates = new List<string>();
foreach(JProperty prop in result.Properties()) 
{
    if (prop.Name != "Status") 
    {
        var values = jObject["EventAppGetAllSessionByCustomerIdResult"][prop.Name].Values<string>("SessionDate");
        dates.AddRange(values);
    }
}

简单说明:

在您的情况下,"02/22/2017"是一个具有对象数组的属性。每个对象都有一个"SessionDate"属性,其中包含一个值。因此,以下代码将从所有对象的"SessionDate"中提取值:

var values = jObject["EventAppGetAllSessionByCustomerIdResult"][prop.Name].Values<string>("SessionDate");

values 表示来自单个属性的所有日期。在您的情况下,它可以是从 "02/22/2017" 或者从 "08/27/2016"

dates 将是 "SessionDate" 值的列表。当然,您必须自己处理可能出现的异常。


谢谢,我已经自己修改了一些代码,现在它可以正常工作了。 - Nirav

0

我不确定这是否符合您的要求,但请尝试将此作为您的输出对象:

public class Session
{
    public string SessionDate { get; set; }
}
public class Status
{
    public string Description { get; set; }
    public int Code { get; set; }
}
public class EventAppGetAllSessionByCustomerIdResult
{
    public KeyValuePair<string, Session[]>[] EventAppGetAllSessionByCustomerId { get; set; }

    public Status Status { get; set; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接