首页 > 解决方案 > JSON 没有反序列化某些值

问题描述

我有一个基类(用作类的基User类):

public abstract class UserB2C
{
…
    public List<SignInName> SignInNames { get; set; }
…
}

public class SignInName
{
    string Type { get; set; }

    string Value { get; set; }
}

还有一些 JSON,其中包括:

\"signInNames\":[{\"type\":\"emailAddress\",\"value\":\"user@yahoo.co.uk\"}],

传递给:

JsonConvert.DeserializeObject<User>(json);

但是创建(反序列化)的对象具有:

    "signInNames": [
        {}
    ],

任何想法为什么该字段没有被填充?没有产生错误。所有其他(简单)值都可以填充。

我尝试更改TypeValue匹配 JSON 字符串的大小写,并尝试在创建List<SignInName>对象时显式创建,但无济于事。

标签: c#json

解决方案


类的属性SignInName应声明为public以便用值反序列化。

public class SignInName
{
    public string Type { get; set; }
    public string Value { get; set; }
}

更新

这是一个最小、完整和可验证的示例:

using Newtonsoft.Json;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        var json = 
        "{\"signInNames\":[{\"type\":\"emailAddress\",\"value\":\"user@example.com\"}]}";
        var user = JsonConvert.DeserializeObject<User>(json);
        System.Console.WriteLine(JsonConvert.SerializeObject(user)); 
    }
}

public abstract class UserB2C
{
    public List<SignInName> SignInNames { get; set; }
}

public class User : UserB2C {  }

public class SignInName
{
    string Type { get; set; }
    string Value { get; set; }
}

输出是{"SignInNames":[{}]}

如果我们制作SignInName类属性public,输出将是:

{"SignInNames":[{"Type":"emailAddress","Value":"user@example.com"}]}

推荐阅读