我在使用ServiceStack的DataContract API + * ServiceClient从标准的XML / JSON REST服务中获取适当的反序列化时遇到了一些麻烦。例如,如果我们采用以下输出(使用accept header来获取json):
http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/198440/allinfo
你将如何构建一个模型对象来处理两者 JSON输出和来自该服务的XML输出(使用accept 标题来获取json)?
您是否需要在中提供明确的“名称”参数? DataContract和DataMember属性以获得适当的 反序列化?
ServiceStack如何将XML / JSON对象名称与 属性名称在模型中?它们是否区分大小写?
我们可以在JsonRestClientAsync中无缝地获得某种通用的Func委托API 整合我们自己的反序列化机制,我们有第三方格式来处理 与?
是的我知道我可以使用ServiceStack.Text进行显式反序列化。我在所有.NET项目中都非常依赖这种依赖: - )
谢谢,
Anuj
答案 0 :(得分:5)
如果它是第三方Web服务(即不是ServiceStack Web服务)而不是我只想解析其中一种格式,我个人更喜欢JSON,以便在他们更改API时获得更好的弹性。 IMO是一个失败的主张,试图用相同的模型支持不同的格式,他们可以随时轻松打破它。
对于ServiceStack的JSON Serializer,在最新版本中 - 属性不区分大小写,您可以设置JsConfig.EmitCamelCaseNames=true
以使其发出camelcase名称。 See this unit test。
如果您希望属性名称与生成的名称不同,它现在也会尊重[DataMember(Name="custom")]
参数。