2

我在使用 ServiceStack 的 DataContract API + *ServiceClient 从标准 XML / JSON REST 服务中获取适当的反序列化时遇到了一些麻烦。例如,如果我们采用以下输出(使用接受标头获取 json):

http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/198440/allinfo

  1. 您将如何构建模型对象以处理来自该服务的 JSON 输出和 hte XML 输出(使用接受标头获取 json)?

  2. 您是否需要在 DataContract 和 DataMember 属性中提供明确的“名称”参数才能获得适当的反序列化?

  3. ServiceStack 如何将 XML/JSON 对象名称与模型中的属性名称进行比较?它们区分大小写吗?

  4. 我们能否在 JsonRestClientAsync 中获得某种通用的 Func 委托 API,以无缝集成我们自己的反序列化机制,我们需要处理 3rd 方格式?

是的,我知道我可以使用 ServiceStack.Text 进行显式反序列化。我几乎在我所有的 .NET 项目中都承担了这种依赖:-)

谢谢,

阿努伊

4

1 回答 1

5

如果它是第 3 方 Web 服务(即不是 ServiceStack Web 服务),那么我只会尝试解析其中一种格式,如果他们更改 API,我个人更喜欢 JSON 以获得更好的弹性。IMO 试图用相同的模型支持不同的格式是一个失败的主张,他们可以随时轻松地打破它。

至于 ServiceStack 的 JSON 序列化器,在最新版本中 - 属性不区分大小写,您可以设置JsConfig.EmitCamelCaseNames=true让它发出驼峰名称。请参阅此单元测试

[DataMember(Name="custom")]如果您希望属性名称与生成的名称不同,它现在也尊重参数。

于 2012-01-08T13:27:46.963 回答