如何区分对象的2个版本的2个Json表示形式,以便可以将输出提供给JsonConvert.PopulateObject(...)以将对象的第一个版本转换为第二个版本。例如:
public class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}
var myDog = new Dog { Name = "Dio", Age = 1 };
var before = JsonConvert.SerializeObject(myDog); // { "Name": "Dio", "Age" : 1 }
myDog.Age++;
var after = JsonConvert.SerializeObject(myDog); // { "Name": "Dio", "Age" : 2 }
// How do I generate this variable, so that I can use it with PopulateObject?
var ageIncrementJson = "{ \"Age\" : 2 }";
myDog = new Dog { Name = "Dio", Age = 1 };
JsonConvert.PopulateObject(ageIncrementJson, myDog);
// myDog should now have an age of 2
[我已经尝试过使用JsonDiffPatch,但是会产生前后文件,但Newtonsoft不接受(例如{“ Age”:[“ 1”,“ 2”]}
)public class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Test()
{
var myDog = new Dog { Name = "Dio", Age = 1 };
var before = JsonConvert.SerializeObject(myDog); // { "Name": "Dio", "Age" : 1 }
myDog.Age++;
var after = JsonConvert.SerializeObject(myDog); // { "Name": "Dio", "Age" : 2 }
// How do I generate this variable, so that I can use it with PopulateObject?
var ageIncrementJson = "{ \"Age\" : 2 }";
var diffJson = GetDiffJson(JsonConvert.DeserializeObject<Dog>(before)
, JsonConvert.DeserializeObject<Dog>(after));
myDog = new Dog { Name = "Dio", Age = 1 };
JsonConvert.PopulateObject(ageIncrementJson, myDog);
// myDog should now have an age of 2
}
private static string GetDiffJson(Dog d1, Dog newDog)
{
var dic = new Dictionary<string, object>();
// alternatively use reflection, for each property...
if (d1.Age != newDog.Age)
dic[nameof(d1.Age)] = newDog.Age;
if (d1.Name != newDog.Name)
dic[nameof(d1.Name)] = newDog.Name;
return JsonConvert.SerializeObject(dic);
}