【问题标题】:Need Json Response to be queried and bind to modal view需要 Json Response 被查询并绑定到模态视图
【发布时间】:2021-01-26 07:38:18
【问题描述】:

json 响应

[
    {
        "name": "Bob",
        "gender": "Male",
        "age": 23,
        "pets": [
            {
                "name": "Garfield",
                "type": "Cat"
            },
            {
                "name": "Fido",
                "type": "Dog"
            }
        ]
    },
    {
        "name": "Jennifer",
        "gender": "Female",
        "age": 18,
        "pets": [
            {
                "name": "Garfield",
                "type": "Cat"
                "name": "sam",
                "type": "dog"
            }
        ]
    },

我需要查询并找到包含两个列表的记录,男性和女性,其中只有猫的宠物 所以输出会是

Male
garfield 
female 
garfield

【问题讨论】:

标签: json linq model-view-controller


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    安装一个读取 Json 的包。

    在 Visual Studio 中:右键单击引用;管理 nuget 包;找到 NewtonSoft.Json;安装。

    您需要一个函数来读取您的文件并返回IEnumerable&lt;PetOwner&gt;。 阅读 NewtonSoft 手册,了解如何执行此操作。

    public static IEnumerable<PetOwner> ReadPetOwners(string fileName) {...}
    

    我需要查询并查找包含两个列表的记录,男性和女性及其宠物只有猫

    因此,您不想要(的某些属性)PetOwners 只有 Cats,您想要 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 的零个或多个猫的名称。

    要填充属性 Cats,请获取此 CatOwner 的 Pets。只保留类型为猫的宠物。从剩下的 Pets 中取出 Name 并将所有内容放在 List 中。

    问题是:您还会拥有根本没有猫的 PetOwners 的性别。如果你不想要它们。使用Where 过滤它们。

    继续 LINQ:

    .Where(petOwner => petOwner.Cats.Any());
    

    简单的祝你好运

    【讨论】:

    • 谢谢大家,你的回答对我来说很好,当我在 UI 中做了一些过滤以达到结果时,我已经很满足了,
    • 但是从某种意义上说,您的答案对我来说看起来不错,应该在代码中完成查询然后查看。
    猜你喜欢
    • 2011-01-04
    • 2014-10-01
    • 2011-08-25
    • 1970-01-01
    • 2017-02-22
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多