【发布时间】:2019-01-06 12:17:35
【问题描述】:
我想创建一个新对象,并在创建对象期间进行 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 异常,我不知道如何在构造函数中执行此操作。
【问题讨论】:
-
您收到 StackOverflow 异常,因为 DeserializeObject 创建了一个新对象,即它调用了构造函数。并且您的构造函数调用 DeserializeObject,即您创建了一个无循环的循环。
-
var p = Person.StaticFactoryMethod(1);- 尽管模型或 DTO 不应实现自己的持久性。
标签: c# json deserialization json-deserialization