我有一个基类(用于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": [
{}
],
您为什么不填写该字段? 没有产生错误。 其他所有(简单)值都可以正常填充。
我尝试更改Type
和Value
的大小写以匹配JSON字符串,
并且还尝试在创建对象时显式创建List<SignInName>
,但无济于事。
答案 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"}]}