如何解决需要查询Json Response并绑定到模式视图
json响应
[
{
"name": "Bob","gender": "Male","age": 23,"pets": [
{
"name": "Garfield","type": "Cat"
},{
"name": "Fido","type": "Dog"
}
]
},{
"name": "Jennifer","gender": "Female","age": 18,"type": "Cat"
"name": "sam","type": "dog"
}
]
},
我需要查询并找到带有两个列表的记录,每个记录有两个列表,其中有只猫的宠物 这样就可以了
Male
garfield
female
garfield
解决方法
您可以按以下方式使用Newtonsoft:
var root = JToken.Parse(json);
var values = root.Select(t => new
{
Name = t.SelectToken("pets").FirstOrDefault(p => p.Value<string>("type") == "Cat")["name"],Gender = t["gender"].ToString()
});
请参阅:https://dotnetfiddle.net/1zoJaw
结果:
Name : Garfield,Gender :Male
Name : Garfield,Gender :Female
,
安装一个读取Json的软件包。
在Visual Studio中:右键单击引用;管理nuget包;查找NewtonSoft.Json;安装。
您需要一个函数来读取文件并返回一个IEnumerable<PetOwner>
。
阅读有关如何执行此操作的NewtonSoft手册。
public static IEnumerable<PetOwner> ReadPetOwners(string fileName) {...}
我需要查询和查找带有两个列表的记录,每个记录分别有只猫的雄性和雌性
因此,您不希望只拥有Cats的PetOwners(的某些属性),而是想要PetOwners的性别,每个都有其Cats的名称。
IEnumerable<PetOwner> petOwners = ReadPetOwners("PetOwners.Json");
var result = petOwners.Select(petOwner => new
{
Gender = petOwner.Gender,Cats = petOwner.Pets.Where(pet => pet.Type == "Cat")
.Select(pet => pet.Name)
.ToList(),});
换句话说:采用PetOwners的顺序。从此序列的每个PetOwner中,创建一个具有两个属性的新对象。属性Gender
包含PetOwner的性别。属性Cats
包含此PetOwner的零个或多个猫的名称。
要填充属性猫,请拾取此猫主人的宠物。只保留猫类型的那些宠物。从其余的宠物中,取名字并将所有内容放入列表中。
问题是:您还将拥有完全没有猫的宠物主人的性别。如果您不想要它们。使用Where
对其进行过滤。
继续LINQ:
.Where(petOwner => petOwner.Cats.Any());
简单的漫画
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。