动态属性的C#json对象
我需要输出这个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
{
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());