将Json加载到.NET对象并对结果进行过滤和排序

Program.cs

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;

namespace JsonFilterSort
{
	internal class Program
	{
		
		private static void Main(string[] args)
		{
			string url = @"http://agl-developer-test.azurewebsites.net/people.json";
			var client = new System.Net.WebClient();

			ParseJsonToObject(client.DownloadString(url));
		}

        /// <summary>
        ///将json解析为对象
        /// </summary>
        /// <param name="json">The json string.</param>
        public static void ParseJsonToObject(string json)
		{
			JArray jsonArray = JArray.Parse(json);

            //将Json加载到.Net对象
            IList<Owner> owners = jsonArray.Select(x => new Owner
			{
				Name = (string)x["name"],
				Gender = (string)x["gender"],
				Age = (int)x["age"],
				Pets = (x["pets"]).Select(p => new Pet { PetName = (string)p["name"], PetType = (string)p["type"] }).ToList()
			}
			).ToList();

			Console.WriteLine("Male");

            //打印 Male owners拥有的所有猫
            //可以转换为单个Linq语句
            foreach (var item in owners.Where(p => p.Gender == "Male"))
			{
				foreach (var pet in item.Pets.Where(p => p.PetType == "Cat").OrderBy(x => x.PetName))
				{
					Console.WriteLine("-" + pet.PetName);
				}
			}

			Console.WriteLine("Female");

            // Print all cats owned by
            //打印  Female owners拥有的所有猫
            foreach (var item in owners.Where(p => p.Gender == "Female"))
			{
				foreach (var pet in item.Pets.Where(p => p.PetType == "Cat").OrderBy(x => x.PetName))
				{
					Console.WriteLine("-" + pet.PetName);
				}
			}
			
			Console.WriteLine("按任意键继续...");
			Console.ReadKey();
		}
	}

	/// <summary>
	/// Owner 类
	/// </summary>
	public class Owner
	{
		public string Name { get; set; }

		public string Gender { get; set; }

		public int Age { get; set; }

		/// </value>
		public List<Pet> Pets { get; set; }
	}

	/// <summary>
	/// Pet 类
	/// </summary>
	public class Pet
	{
		public string PetName { get; set; }

		public string PetType { get; set; }
	}
}

people.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": "Steve",
    "gender": "Male",
    "age": 45,
    "pets": null
  },
  {
    "name": "Fred",
    "gender": "Male",
    "age": 40,
    "pets": [
      {
        "name": "Tom",
        "type": "Cat"
      },
      {
        "name": "Max",
        "type": "Cat"
      },
      {
        "name": "Sam",
        "type": "Dog"
      },
      {
        "name": "Jim",
        "type": "Cat"
      }
    ]
  },
  {
    "name": "Samantha",
    "gender": "Female",
    "age": 40,
    "pets": [
      {
        "name": "Tabby",
        "type": "Cat"
      }
    ]
  },
  {
    "name": "Alice",
    "gender": "Female",
    "age": 64,
    "pets": [
      {
        "name": "Simba",
        "type": "Cat"
      },
      {
        "name": "Nemo",
        "type": "Fish"
      }
    ]
  }
]

运行结果如图:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值