JSON不反序列化某些值

时间:2018-08-31 11:53:11

标签: c# 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>,但无济于事。

1 个答案:

答案 0 :(得分:4)

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