c# - 如何序列化字典
问题描述
我有一个我建立的类,所以我可以控制它。我的问题如下:
我正在尝试发送一个 http 请求(放置),其中包含一些内容。
var dictJson = Newtonsoft.Json.JsonConvert.SerializeObject(dictionary, Formatting.Indented);
var test = await _httpClient.PutAsync($"myurl", new StringContent(dictJson, Encoding.UTF8, "application/json"));
问题是我正在尝试发送 a Dictionary<MyClass, string>
,所以我很好地通过了字典,但问题在于序列化。然后在序列化之后,我得到了正确的值,但不是对象,而是类的名称,所以改为“MyClass”。
我曾尝试直接序列化字典但没有成功,我还尝试了以下方法:
var dictionary = new Dictionary<string, string>();
foreach(var kvp in dict)
{
var t = kvp.Key.ToString();
dictionary.Add(kvp.Key.ToString(), kvp.Value);
}
仍然得到相同的结果,有什么建议吗?
解决方案
您不能MyObject
在 JSON 中用作键。来自Newtonsoft 序列化指南
序列化字典时,字典的键被转换为字符串并用作 JSON 对象属性名称。可以通过重写键类型的 ToString() 或实现 TypeConverter 来自定义为键编写的字符串。TypeConverter 还将支持在反序列化字典时再次将自定义字符串转换回来。
而不是您可以像这样以 JSON 结构传输您的字典:[{ Key: 'your key from a dictionary', Value = 'your value from a dictionary'}]
简单的实现:
class SimpleKeyValue<TK, TValue>
{
public TK Key { get; set; }
public TValue Value { get; set; }
}
Dictionary<MyClass, int> dict = new Dictionary<MyClass, int>{
{new MyClass() {Id = 1}, 1},
{new MyClass() {Id = 2}, 2},
{new MyClass() {Id = 3}, 3},
{new MyClass() {Id = 4}, 4}
};
var simpleKeyValues = dict.Select(item => new SimpleKeyValue<MyClass, int>
{
Key = item.Key,
Value = item.Value
});
var json = JsonConvert.SerializeObject(simpleKeyValues);
var result = JsonConvert.DeserializeObject<IEnumerable<SimpleKeyValue<MyClass, int>>>(json)
.ToDictionary(item => item.Key, item => item.Value);
推荐阅读
- blender - EEVEE 没有按照我想要的方式渲染我的图像,程序生成的阴影以紫色渲染
- javascript - 在异步函数中使用查询
- arrays - 将 char 数组与 KeyEvent 进行比较时获取 ArrayIndexOutOfBoundsException
- python - 尝试使用 Python 将复杂的嵌套 JSON 模式转换为 Excel 电子表格或 CSV
- discord - 这个 discord.js 事件不起作用需要适应
- r - 在保留分面变量的同时计算 ggplot2 图中的比率
- mongodb - 如何从我家连接在 aws ec2 上的容器中运行的 mongodb?
- php - 导入 CSV 文件时的每行验证
- python - Seaborn barplot:没有为 MultiIndex 定义 isna
- javascript - 通过 DM 给出多个提示