【发布时间】:2018-07-07 06:04:42
【问题描述】:
我现在的情况是我有一个json文件
[
{
"first_name" : "Foo",
"last_name" : "Bar",
"gender" : 0
},
{
"first_name" : "FooFoo",
"last_name" : "BarBar",
"gender" : 1
}
]
还有一个 Person 类:
class Person
{
public Id { get; private set; }
public string FirstName;
public string LastName;
public int Gender;
}
我正在使用这样的反序列化器:
JArray.ToObject<List<Person>>();
或等价物:
JsonConvert.DeserializeObject<List<Person>>(jsonstr, ...)
虽然json对象本身没有,但在Person类中有一个“Id”字段,我需要它根据Person在列表中的位置增加值。
我不能将 Id 设为公共属性并在反序列化后设置它的原因是,它是一个 Id,它不应该是可编辑的,而且我认为编程不好。
我听说过 JsonConverters。使用它们可以实现吗?我需要一些帮助。总结一下,我需要一种将 Json 数组反序列化为对象列表并自动将它们设置为自动递增 Id 的方法。
那么,谢谢您的宝贵时间。
【问题讨论】:
-
您的 ID 访问修饰符设置为私有,因此序列化方法最受访问修饰符级别的影响
-
有很多解决方案,但我认为你可以有一个公共访问修饰符的属性,然后在 seter 方法中可以做你想做的事
-
@AliSheikhNezami 将 OP 私有字段更改为具有私有设置器的公共字段...但这不是问题...问题仍然存在。我可以在反序列化后手动设置 ID,并且在设置后(又名... Id!= null)无法再设置 Id。不知道这样的做法会有多好。
标签: c# json.net json-deserialization