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": [
{}
],
任何想法为什么该字段没有被填充?没有产生错误。所有其他(简单)值都可以填充。
我尝试更改Type
和Value
匹配 JSON 字符串的大小写,并尝试在创建List<SignInName>
对象时显式创建,但无济于事。
解决方案
类的属性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"}]}
推荐阅读
- python-3.x - 在 Dash UI Textarea 组件中模拟终端输出
- rest - 关于 REST API GET 与 POST PUT 的面试问题。为什么我不能使用 GET 来更新或创建资源。?
- javascript - 为什么我的 setTimeout 函数没有按我预期的方式记录?
- react-native - React Native 错误:“无法从“src\screens\Main.js”解析“react”
- regex - 匹配两个标签之间所有出现的单词 - 正则表达式
- python - 如何在同一个浏览器上打开两个链接
- java - 解析具有相同主体的其他类使用改造
- android - 实现对角文本视图/布局效果
- python - 通过 google colab 安装 python 3.7 作为默认 python
- c++ - 检测无向图代码中的循环时出错