如何在C#中使用构造函数反序列化JSON对象?

时间:2019-01-06 12:17:36

标签: c# json deserialization json-deserialization

我想创建一个新对象,并在对象创建期间进行RPC调用以获取其属性,然后返回填充了该属性的对象。参见以下示例:

using Newtonsoft.Json;

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Person(int Id)
    {
        // here would be an RPC call to get the FirstName,LastName. result is JSON
        string result = "{\"Id\": 1, \"FirstName\": \"Bob\", \"LastName\": \"Jones\"}";
        this = JsonConvert.DeserializeObject<Person>(result);

    }
}
class Program
{
    static void Main(string[] args)
    {
        var p = new Person(1);
        // p.FirstName should be Bob
    }
}

我不知道如何在没有获取StackOverflow异常的情况下在构造函数中执行此操作。

1 个答案:

答案 0 :(得分:0)

要考虑的一种选择是在Person内使用静态方法:

public static Person GetPerson(int Id)
{
    // here would be an RPC call to get the FirstName,LastName. result is JSON
    string result = "{\"Id\": 1, \"FirstName\": \"Bob\", \"LastName\": \"Jones\"}";
    return JsonConvert.DeserializeObject<Person>(result);

}

这避免了原始代码的递归性质。

另一个选择是将class更改为structstruct s允许您分配给this(不同于class es)。而且它们有一个默认的构造函数(与您的带参数的构造函数分开),因此没有递归行为。