在序列化之前-
"welcomePageConfig": {
"welcomeTitleText": {
"style": {
"color": "#FFFFFF"
},
"content": {
"sv": "Välkommen",
"en": "Welcome"
}
}
我使用JsonSerializer将下面的字符串反序列化为一个对象。
string jsonString = JsonSerializer.Serialize(welcomePageConfig);
序列化后-
{\"WelcomeTitleText\":{\"Style\":{\"Color\":\"#FFFFFF\"},\"Content\":[{\"Key\":\"sv\",\"Value\":\"Välkommen\"},{\"Key\":\"en\",\"Value\":\"Welcome\"}]}
welcomePageConfig = JsonSerializer.Deserialize<WelcomePageConfig>(jsonString);
当我尝试反序列化时,它给了我一个错误,提到**“The JSON value could not be converted to System.Collections.Generic.Dictionary`2[System.String,System.String]."**
因为它是一本字典,所以它会出现在“{“Key....”这部分之后。
public class WelcomePageConfig
{
[JsonProperty("welcomeTitleText")]
public StylingComponent WelcomeTitleText { get; set; }
}
public class StylingComponent
{
[JsonProperty("style")]
public Style Style { get; set; }
[JsonProperty("content")]
public Dictionary<string, string> Content { get; set; }
}
如何解决此问题?
1条答案
按热度按时间aydmsdu91#
有一个非常常见的约定,即
Dictionary<string, ...>
在执行过程中作为JSON对象处理。序列化(去序列化),例如,System.Text.Json
和Newtonsoft的Json.NET都支持这种约定。在序列化过程中的某个时刻,似乎有些事情没有按预期进行(您没有显示序列化代码),Content
的处理方式类似于IEnumerable
(键值对),而不是Dictionary
,因此您需要更改反序列化的模型: