C# 在反序列化期间进行服务调用是一个好主意吗?

C# 在反序列化期间进行服务调用是一个好主意吗?,c#,json,design-patterns,serialization,json.net,C#,Json,Design Patterns,Serialization,Json.net,在forCustomCreationConverter中,它显示: “更复杂的场景可能涉及在运行时解析对象的对象工厂或服务定位器。” 我正在处理这样一个场景,在这个场景中,我必须使用传入的DTO(JSON格式)对持久性对象进行水合。要使持久对象水合,我必须首先使用服务调用加载它。我可以在反序列化期间使用CustomCreationConverter进行此调用。或者,我可以将JSON作为ExpandoObject使用,并传递地分配所有成员。复杂度不如对象图小 关于在反序列化过程中进行服务调用的某些

在for
CustomCreationConverter
中,它显示:

“更复杂的场景可能涉及在运行时解析对象的对象工厂或服务定位器。”

我正在处理这样一个场景,在这个场景中,我必须使用传入的DTO(JSON格式)对持久性对象进行水合。要使持久对象水合,我必须首先使用服务调用加载它。我可以在反序列化期间使用
CustomCreationConverter
进行此调用。或者,我可以将JSON作为
ExpandoObject
使用,并传递地分配所有成员。复杂度不如对象图小

关于在反序列化过程中进行服务调用的某些内容似乎不正确。这使得测试更加复杂,因为我必须首先将该对象加载到内存中才能对其进行反序列化。这也要求紧密耦合


因此,我的问题是:在这种情况下,在反序列化期间进行服务调用是一个好主意吗?

据我所知,您正在执行以下步骤:

  • 调用反序列化
  • 在CustomCreationConverter中,通过远程服务检索预填充的对象实例
  • Json.Net在检索到的实例上执行它的操作
  • 在我看来,您可以使用
    PopulateObject
    方法,如下所示:

    var obj = RemoteService.Retrieve(id);
    Newtonsoft.Json.JsonConvert.PopulateObject(jsonString, obj);
    
    通过这种方式,您可以使代码保持简单(尽管不那么有趣)和可测试性