【发布时间】:2018-04-02 00:12:36
【问题描述】:
我正在使用 Newtonsoft JSON Serialization(packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll) 将字符串转换为 C# 中的类域。但是当我使用 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
});
结果:
列表(角色)是从字符串转换而来的。但是,剩余的列,它不会被转换。屏幕已添加 FYR:
【问题讨论】:
-
顺便说一句,您是否有任何理由不使用自动实现的属性?如果您使用它们,您的代码可能会简单得多。 (而且你会完全避免这个问题。)
-
如果您将 JSON 作为类粘贴到 VS 中,它将为您创建类