嵌套字典的 Json 序列化返回 { "key" : "key1" , "value" : "value1" }



我目前正在开发一项Web服务,直到今天我才遇到这种行为。这是我要回的课:

public class Block
{
public int order { get; set; }
public string title { get; set; }
public Dictionary<string, object> attributes { get; set; }
}

attributes可以包含任何类型的值:简单类型、对象、数组等。

当我通过Web服务返回Block对象时,我得到的是:

{
"order": 1,
"attributes": [
{
"Key": "key1",
"Value": "value1"
},
{
"Key": "key2",
"Value": "value2"
}
],
"title": "Title"
}

有人知道我为什么不简单地得到"key1": "value1"输出吗?

首先,您的JSON无效,请注意这一行的"order": 1之后没有,

在这个修正之后,你可以像这个一样改变你的类结构

public class Attribute
{
public string Key { get; set; }
public object Value { get; set; }
}
public class Block
{
public int order { get; set; }
public List<Attribute> attributes { get; set; }
public string title { get; set; }
}

通过这种方式,您将能够反序列化JSON,我只是在这个网站上使用https://json2csharp.com/用于将JSON转换为C#类

至于用法,您可以使用.FirstOrDefault(x=>x.Key=="key1"(来获取您想要的任何数据,或者如果您将逐一处理所有列表,您可以简单地使用属性。计数

当我进行时

var x = new Class
{
order = 1,
title = "Title",
attributes = new Dictionary<string, object>
{
{ "key1", "value1" },
{ "key2", "value2" }
}
};
var json = JsonConvert.SerializeObject(x);
Console.WriteLine(json);

我得到

{"order":1,"title":"Title","attributes":{"key1":"value1","key2":"value2"}}

您是否有序列化数据的代码,或者ASP.NET是否为您执行此操作?

相关内容

最新更新