字典序列化:System.Exception:类型 <Type> 不是字典
Dictionary serialization: System.Exception: Type <Type> is not a dictionary
我的类型中有一本字典,我想将其作为控制器的输入:
using Newtonsoft.Json;
namespace LM.WebApp.Models.ApiModels;
[JsonDictionary]
public class Values
{
public Dictionary<string, string> values { get; set; }
}
public class Data
{
public bool is_active { get; set; }
public IList<string> labels { get; set; }
public string name { get; set; }
public Values values { get; set; }
}
public class DictionaryImportApiModel
{
public IList<Data> data { get; set; }
}
我正在通过此测试的输入 JSON:
{
"data":
[
{
"is_active": true,
"labels": [
"SYSTEM",
"EXTERNAL"
],
"name": "MEDICATION_REQUEST_INTENT",
"values": {
"order": "Замовлення ліків",
"plan": "План застосування"
}
}
]
}
并从问题标题和入站空字典中获取错误 object。我已将 Newtonsoft.Json
序列化器更改为 Microsoft.AspNetCore.Mvc.NewtonsoftJson
并从 Values
class 中删除属性 [JsonDictionary]
并在 AddControllersWithViews
之后添加 .AddNewtonsoftJson()
Startup
。异常消失,但入站 object 中的字典仍然为空。是否有必要使用自定义转换器(如 this)
处理字典?
将 Data
模型的 values
类型更改为 Dictionary<string, string>
:
public class Data
{
public bool is_active { get; set; }
public IList<string> labels { get; set; }
public string name { get; set; }
public Dictionary<string, string> values { get; set; }
}
主要 .NET json 序列化器(Newtonsoft.Json
和 System.Text.Json
支持的约定之一,可能还有其他一些,但尚未使用它们)正在转换 json 对象到 Dictionary
,所以你不需要额外的包装器 class Values
.
P.S.
除非您的项目中有特定的命名约定 - 不需要像在源代码 json 中那样命名 classes 属性。对于 Newtonsoft.Json
,您可以在序列化程序设置中使用 JsonPropertyAttribute
or trying to setup corresponding NamingStrategy
标记属性(System.Text.Json
具有类似的选项)。
我的类型中有一本字典,我想将其作为控制器的输入:
using Newtonsoft.Json;
namespace LM.WebApp.Models.ApiModels;
[JsonDictionary]
public class Values
{
public Dictionary<string, string> values { get; set; }
}
public class Data
{
public bool is_active { get; set; }
public IList<string> labels { get; set; }
public string name { get; set; }
public Values values { get; set; }
}
public class DictionaryImportApiModel
{
public IList<Data> data { get; set; }
}
我正在通过此测试的输入 JSON:
{
"data":
[
{
"is_active": true,
"labels": [
"SYSTEM",
"EXTERNAL"
],
"name": "MEDICATION_REQUEST_INTENT",
"values": {
"order": "Замовлення ліків",
"plan": "План застосування"
}
}
]
}
并从问题标题和入站空字典中获取错误 object。我已将 Newtonsoft.Json
序列化器更改为 Microsoft.AspNetCore.Mvc.NewtonsoftJson
并从 Values
class 中删除属性 [JsonDictionary]
并在 AddControllersWithViews
之后添加 .AddNewtonsoftJson()
Startup
。异常消失,但入站 object 中的字典仍然为空。是否有必要使用自定义转换器(如 this)
处理字典?
将 Data
模型的 values
类型更改为 Dictionary<string, string>
:
public class Data
{
public bool is_active { get; set; }
public IList<string> labels { get; set; }
public string name { get; set; }
public Dictionary<string, string> values { get; set; }
}
主要 .NET json 序列化器(Newtonsoft.Json
和 System.Text.Json
支持的约定之一,可能还有其他一些,但尚未使用它们)正在转换 json 对象到 Dictionary
,所以你不需要额外的包装器 class Values
.
P.S.
除非您的项目中有特定的命名约定 - 不需要像在源代码 json 中那样命名 classes 属性。对于 Newtonsoft.Json
,您可以在序列化程序设置中使用 JsonPropertyAttribute
or trying to setup corresponding NamingStrategy
标记属性(System.Text.Json
具有类似的选项)。