如何在 C# 中为这种类型制作 json 对象?

Posted

技术标签:

【中文标题】如何在 C# 中为这种类型制作 json 对象?【英文标题】:How to make json object for this type in c#? 【发布时间】:2018-01-06 15:11:41 【问题描述】:

我正在研究 highcharts 并从 c# 以 ajax 发送数据。它工作正常现在我在这里遇到了一些不同类型的图表数据

以前,当我必须将数据发送到图表时,我只需创建系列、类别等的属性

public class SeriesQuarter2

    public string id  get; set; 
    public string name  get; set; 
    public List<Data2> data  get; set; 

并填写此属性的列表并使用 javascriptserializer 对其进行序列化 并存储这个 json 字符串并返回到我使用 JSON.parse 解析的 ajax 成功,

所以我要制作的图表系列看起来像这样

series: [
    
        id: '1',
        name: 'Tokyo',
        data: [-49.9, 71.5]
    ,
    
        id: '2',
        name: 'New York',
        data: [83.6, -78.8]
    
]

现在这很好,但现在我必须为这种类型的系列发送对象

series: [
    
        type: 'column',
        name: 'Tokyo',
        data: [-49.9, 71.5]
    ,
    
        type: 'column',
         name: 'New York',
        data: [83.6, -78.8]
    ,
    
        type: 'scatter',
        showInLegend: false,
        data: [
            
                name:'Mydata',
                y: 200,
                mydata : 4,
                color:'red',
                marker: 
                    symbol: 'url(http://www.highcharts.com/demo/gfx/snow.png)'
                
            , 
            
                name:'Mydata2',
                y: 200,
                mydata : -4,
                marker: 
                    symbol: 'url(http://www.highcharts.com/demo/gfx/sun.png)'
                   
            
        ]
    
]

我将如何制作这种具有不同属性的对象?

【问题讨论】:

用不同的属性制作不同的类型? @Reniuz 系列有一个数据变化的属性,首先它有数字列表然后它有不同的属性 name,y,mydata 等 从头开始......在json系列中有一个......一些不同数据的列表。但!不同的数据具有相似的字段:名称和数据。因此,您可以创建某种具有字段名称和通用类型数据字段的基类。或者你可以简单地找到 json->c# 类转换工具,看看它生成了什么。 我从网上得到的只有 4 个属性,名称、类型、showinlegend(bool) 和 list 数据。这行得通吗? @Reniuz 【参考方案1】:

好的,这里有一个想法:

class RootObject

    public List<SeriesItem> series  get; set;  = new List<SeriesItem>();


class SeriesItem

    public string type  get; set; 
    public string name  get; set; 
    public bool? showInLegend   get; set; 
    public List<object> data   get; set;  = new List<object>();


class OtherData

    public int y  get; set; 
    public int mydata  get; set; 
    public string name  get; set; 
    public string color  get; set; 
    public Marker marker  get; set; 


class Marker

    public string symbol  get; set; 

用法:

var item1 = new SeriesItem();
item1.type = "column";
item1.name = "Tokyo";
item1.data = new List<object>();
item1.data.AddRange(numbersData);
item1.data.Add(-49.9);
item1.data.Add(71.5);

var otherData1 = new OtherData();
otherData1.name = "MyData";
//...fill other fields

var item2 = new SeriesItem();
item2.type = "scatter";
item2.data.Add(otherData1);

var jsonObject = new RootObject();
jsonObject.series.Add(item1);
jsonObject.series.Add(item2);

//convert jsonObject to json

【讨论】:

没问题。请注意,我没有对此进行测试。 我已经测试过了【参考方案2】:

我的建议是使用任何第三方序列化程序,例如 Newtonsoft json.neteasy,simple,free...

【讨论】:

OP 想要从 json 创建类。这个框架能做到吗? 我假设您将创建一次类,因此您可以使用在线转换器。 [例如] (jsonutils.com)

以上是关于如何在 C# 中为这种类型制作 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中为迷宫设计项目制作 C# 中的图片框?

如何从 django 模型中为模型字段定义 json 类型

如何在 JSON 对象中为 Firebase Cloud Messaging 发送“event_time”?

如何在 C# 中为 Postman 生成的代码在 JSON 正文中设置可变数据

如何将弱类型 JSON 转换为 C# 可读对象

C# 和 typescript 之间 JSON 的端到端类型安全