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

时间:2016-11-24 08:53:14

标签: c# json design-patterns serialization json.net

CustomCreationConverter CustomCreationConverter中,它说:

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

我正在处理这样一个场景,我必须使用传入的DTO(使用JSON)来保存持久对象。为了保持持久对象,我必须首先使用服务调用加载它。我可以使用ExpandoObject在反序列化期间进行此调用。或者我可以将JSON作为{{1}}使用,并传递给所有成员。对象图很小,复杂性不大。

在反序列化期间进行服务调用的事情似乎并不正确。它使测试变得更加复杂,因为我必须首先将该对象加载到内存中才能对其进行反序列化。这也引起了紧密的联系。

所以我的问题是:在此方案中反序列化期间进行服务调用是否是一个好主意?

1 个答案:

答案 0 :(得分:1)

据我了解,您正在执行以下步骤:

  1. 调用反序列化
  2. 在CustomCreationConverter中,您通过远程服务
  3. 检索预先填充的对象实例
  4. Json.Net在检索到的实例上做了这件事。
  5. 嗯,在我看来,你可以使用PopulateObject方法,如下所示:

    var obj = RemoteService.Retrieve(id);
    Newtonsoft.Json.JsonConvert.PopulateObject(jsonString, obj);
    

    通过这种方式,您可以保持代码简单(尽管不那么有趣)并且可以测试。