【发布时间】:2017-04-13 13:53:56
【问题描述】:
目前我面临一个创建 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 做到这一点,请指教。
以下 sn-p 不起作用(即使我删除了 '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();
【问题讨论】:
-
为什么不使用property属性和JsonConvert.Deserialize
()方法? -
我不确定如何使用反序列化方法在特定条件下仅提取 Param1、Param2、Param3。
-
您是否知道您的
results属性是一个包含单个元素的数组...而该单个元素本身就是您的CContainer对象的数组?这是一个错误还是故意的? -
我刚刚意识到它是一个包含单个元素的数组。我对JSON不熟悉,我认为这种格式是故意的,我不能改变它。感谢您指出。