.net core中 json数组转对象

data里的内容

[{"_id":{"id":1},"value":{"Money":1000.0,"Type":2.0}},{"_id":{"id":2},"value":{"Money":1000.0,"Type":2.0}},{"_id":{"id":3},"value":{"Money":1000.0,"Type":2.0}}]

想要的结果

[{"id":1,"Money":1000.0,"Type":2.0},{"id":2,"Money":1000.0,"Type":2.0},{"id":3,"Money":1000.0,"Type":2.0}]

先定义对应的JSON对象,把原始JSON反序列化(这里使用的是Newtonsoft.Json组件)成集合。
再使用LINQ从上一步得到的集合中查询,示例代码如下:


using Newtonsoft.Json;

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // [{"_id":{"id":1},"value":{"Money":1000.0,"Type":2.0}},{"_id":{"id":2},"value":{"Money":1000.0,"Type":2.0}},{"_id":{"id":3},"value":{"Money":1000.0,"Type":2.0}}]

            // 其中1.json为以上的JSON字符串
            var json = System.IO.File.ReadAllText(@"D:\1.json");
            var list = JsonConvert.DeserializeObject<List<Root>>(json);
            var result = list.Select(x => new Target
            {
                Id = x._id.id,
                Money = x.Value.Money,
                Type = x.Value.Type
            });
            Console.WriteLine(JsonConvert.SerializeObject(result));
            Console.ReadKey();
        }
    }

    public class Id
    {
        public int id { get; set; }
    }

    public class Value
    {
        public double Money { get; set; }
        public double Type { get; set; }
    }

    public class Root
    {
        public Id _id { get; set; }
        public Value Value { get; set; }
    }

    public class Target
    {
        public int Id { get; set; }
        public double Money { get; set; }
        public double Type { get; set; }
    }
}

运行结果如下:

[{"Id":1,"Money":1000.0,"Type":2.0},{"Id":2,"Money":1000.0,"Type":2.0},{"Id":3,"Money":1000.0,"Type":2.0}]

你也可以关注[码友网]--一个专注C#/.NET/.NET Core开发的编程爱好者社区。