目前,我正面临着创建LINQ语句的问题,该语句将生成我想要的对象列表。以下部分是我要处理的LINQ对象的示例。
{
"successful": "true",
"result": [
[
{
"Param1": "A1",
"Param2": "A2",
"Param3": "A3",
"Param4": "A4",
"Param5": "1",
"Param6": "A5",
},
{
"Param1": "B1",
"Param2": "B2",
"Param3": "B3",
"Param4": "B4",
"Param5": "2",
"Param6": "B5",
},
{
"Param1": "C1",
"Param2": "C2",
"Param3": "C3",
"Param4": "C4",
"Param5": "2",
"Param6": "C5",
}
]
]
}
我有一个自定义对象类,如下所示,
public class CContainer
{
public string param1{ get; set; }
public string param2{ get; set; }
public string param3{ get; set; }
}
我的最终目标是创建一个CContainer对象列表,其中只包含'结果'下每个项目的前3个参数(Param1,Param2和Param3)。类别。另外,我想只选择 Param5 ==" 2" 的项目。我目前无法使用LINQ这样做,请提供建议。
以下代码段不起作用(即使我删除了' Where'子句)。
List<CContainer> testList = new List<CContainer>();
string responseRet = await response.Content.ReadAsStringAsync();
JObject o = JObject.Parse(responseRet);
testList =
(from item in o["result"]
where item["Param5"].Value<string>() == "2"
select new CCOntainer
{
param1 = item["Param1"].Value<string>(),
param2 = item["Param2"].Value<string>(),
param3 = item["Param3"].Value<string>(),
}).ToList();
答案 0 :(得分:1)
"result"
是一个包含一个数组的数组,其中包含您的对象。
因此要么改变json以使"result"
是一维数组,要么改为:
testList =
(from item in o["result"].FirstOrDefault()
// etc.
答案 1 :(得分:0)
你正试图一次做两件事。
我建议您将它们视为单独的操作,以简化您的代码。
使用JsonConvert.DeserializeObject<T>()
设置类来反序列化所有对象,如下所示:
[JsonObject(MemberSerialization.OptIn)]
public class Result
{
[JsonProperty("success")]
public bool Success{ get; set; }
[JsonProperty("result")]
public List<List<JsonCContainer>> Items{ get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class JsonCContainer
{
[JsonProperty("Param1")]
public string param1{ get; set; }
[JsonProperty("Param2")]
public string param2{ get; set; }
[JsonProperty("Param3")]
public string param3{ get; set; }
[JsonProperty("Param5")]
public string param5{ get; set; }
}
public class CContainer
{
public string param1{ get; set; }
public string param2{ get; set; }
public string param3{ get; set; }
}
您可以使用以下代码获取Result
对象:
string responseRet = await response.Content.ReadAsStringAsync();
Result resultObj = JsonConvert.DeserializeObject<Result>(responseRet);
获得Result
类对象后,请进行过滤:
return resultObj.Items.SelectMany(x => x)
.Where(x => x.param5 == "2")
.Select(y => new CContainer()
{
param1 = y.param1,
param2 = y.param2,
param3 = y.param3
}).ToList();