在MVC C中自定义JSON的默认输出#

问题描述 投票:0回答:1

我使用动态ExpandoObject()来创建NVD3 / d3.js可视化所需的一些json。

nvd3库在数据标识符方面非常明确。

正是我需要的json是以下 -

[{
    key: "AgeGroups",
    values: [{
        "label": "<20",
        "value": 0
    }, {
        "label": ">20 <29",
        "value": 160
    }, {
        "label": ">29 <39",
        "value": 240
    }]
}]

注意:字符串'key'必须是小写的,值必须是复数。

通过以下c#,我能够非常接近 -

ageDemoJson.AgeGroups = new object[]
            {
              new { label = "<20", value =  lessThan20 },
              new { label = ">20 <29", value = between20and29 },
              new { label = ">29 <39", value = between29and39 },
            };

这输出以下内容

    [{
    Key: "AgeGroups",
    Value: [{
        "label": "<20",
        "value": 0
    }, {
        "label": ">20 <29",
        "value": 160
    }, {
        "label": ">29 <39",
        "value": 240
    }]
}]

使用此输出,我需要自定义ExpandoObject的默认行为,并使字符串'Key'变为'key',字符串'value'变为'values'

无论如何这样做?

当然我可以解决这个问题,将json解析为字符串并替换javascript中我需要的东西,但是如果我不必这样做的话。

c# asp.net-mvc nvd3.js expandoobject
1个回答
0
投票

如果您使用的是asp.net核心,则可以通过添加以下行来更改JSON序列化:

services.AddMvc()
    .AddJsonOptions(opts =>
    {
        // Force Camel Case to JSON
        opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    });

或者你可以通过使用Newtonsoft的Json.NET使用此选项获得相同的结果:

string json = JsonConvert.SerializeObject(
        yourObjectToSerialize,
        new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }
    );
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.