c# - 将 JSON 反序列化为包含两个 Dictionary 属性的 C# 类
问题描述
我正在 Xamarin 中开发一个应用程序,我有一个非常简单的 JSON 文件,它由我想一次性反序列化到我在我的域中的 C# 类中的对象组成。(我正在使用Newtonsoft Json.NET框架)
每个 JSON 对象都有 3 个属性:Title、Default 和 Custom。Title 是一个简单的字符串,而 Custom 和 Default 是一对列表。
{
"messages": [
{
"Title": "...",
"Default": {
"lang1": "...",
"lang2": "..."
},
"Custom": {
"lang1": "",
"lang2": ""
}
},
{
"Title": "...",
"Default": {
"lang1": "...",
"lang2": "..."
},
"Custom": {
"lang1": "",
"lang2": ""
}
}
]
}
C# 类仅包含相同的三个属性:
[JsonObject(MemberSerialization.OptIn)]
public class MessageItem
{
[JsonProperty]
public String Title { get; set; }
[JsonConverter(typeof (JsonDictionaryAttribute))]
public Dictionary<string, string> Default { get; set; }
[JsonConverter(typeof(JsonDictionaryAttribute))]
public Dictionary<string, string> Custom { get; set; }
}
现在,如您所见,我已经尝试专门定义 JsonConverter 应该用来反序列化两个 Dictionary 属性的类。问题是,当我尝试反序列化包含单个“消息”对象的 JToken 时,我得到一个System.InvalidCastException。
我试图通过调用来反序列化它
JsonConvert.DeserializeObject<Domain.MessageItem>(messageToken.ToString());
和
messageToken.ToObject<Domain.MessageItem>();
我显然得到了相同的结果。
但是,通过反序列化单个令牌,它工作得很好,所以我很确定我做错了什么是我在课堂上使用的标志声明中的东西。
我希望你们中的一些人可以帮助我!提前致谢。
解决方案
你有一个正确的类设置MessageItem
,但是你发布的 JSON 是一个List<MessageItem>
.
创建以下类:
public class MessageList {
[JsonProperty]
public List<MessageItem> messages { get; set; }
}
并使用Newtonsoft.Json.JsonConvert.DeserializeObject<MessageList>(messageToken.ToString())
,这应该可以解决问题。
推荐阅读
- python - 如何使用 tkinter 消息框启动海龟程序?
- php - 如何删除导致解析错误的 HTML 页面和 PHP 文件中插入的额外 Wordpress 换行符
- php - 如何正确配置.htaccess + fastcgi?
- python - 如何提高神经网络预测、分类
- ios - ABRecord.uniqueId 跨设备是否一致?
- python - 如何将以下 tkinter 代码转换为多线程?
- java - 如何打印仅包含字符串匹配元素的子字符串?
- python-3.x - 在 python3 中使用 plotly 制作曲面图
- localhost - 管理工具中缺少德语 Typo3 版本 9.5.5 语言扩展的后端
- javascript - 如何制作一个使用 Vue.js 标记