无法将JSON值转换为System.Collections.Generic.Dictionary`2[System.String,System.String]

y3bcpkx1  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(879)

在序列化之前-

"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; }
    }

如何解决此问题?

aydmsdu9

aydmsdu91#

有一个非常常见的约定,即Dictionary<string, ...>在执行过程中作为JSON对象处理。序列化(去序列化),例如,System.Text.Json和Newtonsoft的Json.NET都支持这种约定。在序列化过程中的某个时刻,似乎有些事情没有按预期进行(您没有显示序列化代码),Content的处理方式类似于IEnumerable(键值对),而不是Dictionary,因此您需要更改反序列化的模型:

public class StylingComponent
{
    // ...
    public List<KeyValuePair<string, string>> Content { get; set; }
}

相关问题