繁体   English   中英

C# 模型/实体 class 对于 Json Output

[英]C# Model/Entity class for Json Output

为下图创建 c# 模型/实体和 json 结构的正确/标准方法是什么?

C# Model class

public class UnAssignedRequest
{
    public int Total { get; set; }
    public string Subject { get; set; }

}

现有 Json Output

[
  {
    "Total": 0,
    "Subject ": "Physics"
  },
  {
    "Total": 0,
    "Subject ": "Mathamatics"
  },
  {
    "Total": 0,
    "Subject ": "Chemistry"
  },  
  {
    "Total": 8,
    "Subject ": null
  }
]

这里 Total 键/值重复为 0,每个 Subject 属性根本不需要,我正在寻找一个 json 格式,其中包含主题和总计。 这将生成如下图所示的 output。

上面的 json 和 c# model 也可以生成下面的圆环图,但我相信键/值 - “总计”:0; 可以避免在每个主题键/值上,并通过只有一个键/值作为“总计”来使 json 位有效:856; 对于整个 json 数组,类似于下面的 Json。

所需 Json Output:

[
  {
    "Subject ": "Physics"
  },
  {
    "Subject ": "Mathamatics"
  },
  {
    "Subject ": "Chemistry"
  },  
  {
    "Total": 8,    
  }
]

那么,c# model class 需要如何实现所需的 Json Output?

图片参考

感谢您分享您的知识

using System;
using System.Collections.Generic;
using System.Text.Json;

namespace JsonGenerator
{
    class Item
    {
        public string Subject { get; set; }

        public int? Total { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var items = new List<Item>
            {
                new Item
                {
                    Subject = "Physics"
                },
                new Item
                {
                    Subject = "Mathamatics"
                },
                new Item
                {
                    Subject = "Chemistry"
                },
                new Item
                {
                    Total = 8
                },
            };

            var json = JsonSerializer.Serialize(items, new JsonSerializerOptions { IgnoreNullValues = true, WriteIndented = true });

            Console.WriteLine(json);
        }
    }
}

诀窍在于启用IgnoreNullValues选项和int? 声明,允许将值类型初始化为null

结果:

[
  {
    "Subject": "Physics"
  },
  {
    "Subject": "Mathamatics"
  },
  {
    "Subject": "Chemistry"
  },
  {
    "Total": 8
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM