0

我在 wp7 和 wp8 上处理 Windows phone 7.1 项目目标。

我使用 C# 成功地从 REST api 获取数据。API 用 1 个 json 响应我,但它可以是 2 个结构。一个用于正确结果,一个用于错误消息。它们中的每一个都有完全不同的结构。

并且HTTP状态都是一样的---> 200

我将它们翻译成 2 个 C# 类以便进一步反序列化。

我想要的是以不同的方式处理它们,但你知道,反序列化需要 json 的目标 C# 类。但是我怎么知道 API 对我的响应是哪种类型的 json?我可以通过我的眼睛来计算它,但 C# 代码如何计算出来。

我的想法是通过尝试捕获来处理它。

try
{
  //Deserializing the correct result
}
catch ( Exception ex)
{
  //Deserializing the ERROR result
}

有没有更好的方法来解决这个问题?

4

1 回答 1

0

正如 Alaa Masoud 在评论中提到的,如果您的 REST API 方法返回的成功状态代码与错误状态代码不同(通常为 200 表示成功或 4xx 表示错误),您可以在反序列化之前查看该状态码以决定使用哪个类。这将是最好的方法。

如果您的方法在每种情况下都返回相同的状态码,您可以尝试其他一些想法:

  1. 您可以使用Linq to Json而不是反序列化为固定类。换句话说,使用JObject.Parse(),然后遍历 JSON 以查找您感兴趣的属性。
  2. 您可以将您的固定类定义为具有错误和成功 JSON 结构的属性,然后将NullValueHandling反序列化器上的选项设置为Ignore. 这将允许反序列化器填充它在 JSON 中找到值的属性,而不会引发错误。然后您可以简单地检查对象的成功或错误值。显然,这个解决方案不是那么“干净”,但它可以在紧要关头工作。
于 2013-05-11T06:53:09.617 回答