我目前的情况是我有一个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。
那么,谢谢你的时间。答案 0 :(得分:2)
您不需要在反序列化过程中更改任何内容,您只需在类的构造函数中执行某些操作:
static int NextId = 0;
public Person()
{
Id = NextId++;
}
而且,是的,您绝对不希望自己的ID可以编辑。这里一个好的模式是
public int Id { get; private set;}
您还可以在Id上放置[JsonIgnore]属性。这意味着不会将其分配给。
[JsonIgnore]
public int Id { get; private set;}
重置ID
public static void ResetNextId(int startId)
{
NextId = startId;
}
Person.ResetNextId(0);
还有一个[OnDeserialized]属性可以应用于对象上的过程,以便在反序列化对象后分配属性。
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
// Do stuff
}