JSON反序列化 - 转换问题

时间:2018-04-01 16:06:23

标签: c# json.net

我正在使用Newtonsoft JSON Serialization(packages \ Newtonsoft.Json.11.0.2 \ lib \ net45 \ Newtonsoft.Json.dll)将字符串转换为C#中的Class Domain。但是当我创建一个具有Get / Set属性的域时。它没有被转换。

 public class Account
{
    private string _Email = string.Empty;
    private bool _Active = false;
    private DateTime _CreatedDate = new DateTime();
    private IList<string> _Roles = new List<string> ();

    public string Email { get => _Email; set => value = _Email; }
    public bool Active { get => _Active; set => value = _Active; }
    public DateTime CreatedDate { get => _CreatedDate; set => value = _CreatedDate; }
    public IList<string> Roles { get => _Roles; set => value = _Roles; }
}

运行代码,

 string json = @"{
          'Email': 'james@example.com',
          'Active': true,
          'CreatedDate': '2013-01-20T00:00:00Z',
          'Roles': [
            'User',
            'Admin'
          ]
        }";

        Account account1 = JsonConvert.DeserializeObject<Account>(json, new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All
        });

结果:

enter image description here

列表(角色)是从字符串转换而来的。但是,剩余的列,它不会被转换。屏幕添加FYR:

1 个答案:

答案 0 :(得分:3)

它没有被转换,因为您正在为value分配您的支持字段,而它应该是颠倒的。

您目前正在这样做

public string Email { get => _Email; set => value = _Email }

这是不正确的,如果你真的想使用支持字段,那么就像

一样
public string Email { get => _email; set => _email = value; }

(另请注意,我将支持字段更改为Camel Cased,它在C#中更新为coding conventions

它与列表一起使用的原因是,NewtonSoft看到了一个列表,只是将这些项添加到列表中(它只是一个get,但没有设置)

实际上,您不需要任何支持字段,只需通过自动属性

即可解决
public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; } = new List<string>();
}