我有一个看起来像这样的Json对象:
{
wvw_matches: [
{
wvw_match_id: "1-4",
red_world_id: 1011,
blue_world_id: 1003,
green_world_id: 1002,
start_time: "2013-09-14T01:00:00Z",
end_time: "2013-09-21T01:00:00Z"
},
{
wvw_match_id: "1-2",
red_world_id: 1017,
blue_world_id: 1021,
green_world_id: 1009,
start_time: "2013-09-14T01:00:00Z",
end_time: "2013-09-21T01:00:00Z"
}
]
}
它包含的数组中的对象比上面显示的示例多得多。无论如何,我需要根据wvw_match_id选择Json对象。
我将如何实现这一目标? :)
答案 0 :(得分:7)
由于评论中您似乎已经半熟于使用JObject
和Linq的想法,所以这是一个示例程序,演示如何使用该方法通过ID从您的JSON获取特定匹配:
class Program
{
static void Main(string[] args)
{
string json = @"
{
wvw_matches: [
{
wvw_match_id: ""1-4"",
red_world_id: 1011,
blue_world_id: 1003,
green_world_id: 1002,
start_time: ""2013-09-14T01:00:00Z"",
end_time: ""2013-09-21T01:00:00Z""
},
{
wvw_match_id: ""1-2"",
red_world_id: 1017,
blue_world_id: 1021,
green_world_id: 1009,
start_time: ""2013-09-14T01:00:00Z"",
end_time: ""2013-09-21T01:00:00Z""
}
]
}";
string matchIdToFind = "1-2";
JObject jo = JObject.Parse(json);
JObject match = jo["wvw_matches"].Values<JObject>()
.Where(m => m["wvw_match_id"].Value<string>() == matchIdToFind)
.FirstOrDefault();
if (match != null)
{
foreach (JProperty prop in match.Properties())
{
Console.WriteLine(prop.Name + ": " + prop.Value);
}
}
else
{
Console.WriteLine("match not found");
}
}
}
输出:
wvw_match_id: 1-2
red_world_id: 1017
blue_world_id: 1021
green_world_id: 1009
start_time: 9/14/2013 1:00:00 AM
end_time: 9/21/2013 1:00:00 AM
答案 1 :(得分:0)
您应该像通常那样使用LINQ过滤数组来序列化它。所以我只是假设你为这个数组中的对象定义了一个类,称之为MyObj
MyObj[] myObjects = serializer.Deserialize<MyObj[]>(jsonAsAString);
var filteredObjs = myObjects.Where(x => x.wvw_match_id == "the id i'm filtering on");
请记住,使用本机C#对象比使用JSON更容易。 JSON.NET用于执行序列化/反序列化。过滤您的集合是您想要使用迭代或LINQ做的事情。