动态属性的C#json对象

动态属性的C#json对象,c#,json,C#,Json,我需要输出这个json: { white: [0, 60], green: [60, 1800], yellow: [1800, 3000], red: [3000, 0] } { "white": [0, 60], "green": [60, 1800], "yellow": [1800, 3000], "red": [3000, 0] } 我试着思考一个模型,比如: public class Colors

我需要输出这个json:

{
      white: [0, 60],
      green: [60, 1800],
      yellow: [1800, 3000],
      red: [3000, 0]
}
{
    "white": [0, 60],
    "green": [60, 1800],
    "yellow": [1800, 3000],
    "red": [3000, 0]
}
我试着思考一个模型,比如:

 public class Colors
    {

        public int[] white { get; set; }

        public int[] green { get; set; }

        public int[] yellow { get; set; }

        public int[] red { get; set; }
    }
但是财产名称可能会改变,比如白色现在可能变成灰色,等等


有什么线索吗?

你只需要一本字典:

Dictionary<string, int[]> dictionary = new Dictionary<string, int[]>();

dictionary.Add("white", new int[] { 0, 60 });
dictionary.Add("green", new int[] { 60, 1800 });
dictionary.Add("yellow", new int[] { 1800, 3000 });
dictionary.Add("red", new int[] { 3000, 0 });

//JSON.NET to serialize
string outputJson = JsonConvert.SerializeObject(dictionary)

Fiddle

如果您不介意使用额外的库,请尝试(ASP.net已经预装了此库)。 你所要做的就是

dynamic result = JsonConvert.DeserializeObject(json);

如果我没有记错,要访问值,请使用
result[0].value

Json.NET是几乎所有ASP.NET项目使用的库,包括ASP.NET Web API和所有ASP.NET核心项目。它可以将JSON反序列化为强类型对象,或将其解析为弱类型作业对象,或从任何对象生成JSON。不需要创建特殊的类或对象

可以使用以下命令将任何对象序列化为Json字符串:

或者,您可以将JObject用作
动态
对象,并将其直接转换为字符串:

dynamic product = new JObject();
product.ProductName = "Elbow Grease";
product.Enabled = true;
product.Price = 4.90m;
product.StockCount = 9000;
product.StockValue = 44100;
product.Tags = new JArray("Real", "OnSale");

Console.WriteLine(product.ToString());

一本
字典怎么样?您根本不需要该Colors类查看DataContract类,并且您所需的System.ComponentModel名称空间JSON格式无效,您将拥有
在JSONFirst中包装字段名,确保您真正生成的是json,因为这不是合法的json。您的属性缺少引号,如果它应该是json,那么它必须是
“白色”:[0,60],“绿色”:[60,1800],
等等。除此之外,您正在寻找一个简单的字典,如@maccettura commented.@styx为什么?JSON.Net已经可以返回弱类型对象或反序列化为
动态
无需这样做,因为JSON.Net在解析任意字符串时返回弱类型对象。反序列化需要一个强类型对象。@PanagiotisKanavos我不明白你在说什么。如果JSON.NET正在解析字符串,这不是反序列化吗?在这种情况下,根据您自己的注释,它需要一个强类型对象?OP想要生成一个非常明确的字符串/int[]字典的特定JSON,有什么解决方案比它更好呢?一个简单的
JObject.ToString()
@maccettura我认为如果在答案中包含
JsonConvert.SerializeObject(字典)
,会更好。因为现在它只显示了如何将项添加到字典和有限结果中,小提琴包括了这一点,所以我可以将它添加到答案正文中。OP有着很高的声誉,我认为他们在实际序列化方面不需要帮助,但如何为serializeJson.NET创建“动态”对象不是一个额外的库,而是ASP.NET Web API和核心的内置默认值templates@TheMCProgrammer我部分错了,它内置在.NET内核中,但在其他项目类型上,它只是一个可选的nuget packageGotcha,这是有道理的。
dynamic product = new JObject();
product.ProductName = "Elbow Grease";
product.Enabled = true;
product.Price = 4.90m;
product.StockCount = 9000;
product.StockValue = 44100;
product.Tags = new JArray("Real", "OnSale");

Console.WriteLine(product.ToString());