0

我有一个问题,我们有一个可以为多个客户端提供服务的 ASP.NET Web 应用程序。

唯一的区别是应用程序需要将一些 JSON 字符串转换为 .NET 类型<T>的对象,以便将该对象传递给 WCF 服务。

为此,我正在使用 Newtonsoft.Json.Converter:

T input = JsonConvert.DeserializeObject<T>(jsonInput);

问题是该类型<T>在设计时是未知的。但是在反序列化之后,我需要一个通用的强类型对象,以便我可以将它传递给 WCF 服务。其原因是每个客户端的 WCF 服务不同,并且每个客户端的参数输入可能具有不同的结构。

var client = new CalcEngine.CalculatorClient();
var input = new CalcEngine.CalcInputTypes();
var result = client.Calculate(input);

这里的输入是 CalcEngine.CalcInputTypes 类型。对于 clientA 和 clientB,CalcEngine.CalcInputTypes 可能有不同的结构。

实现这一目标的最佳方法是什么?

谢谢。

4

1 回答 1

0

例如,假设您的输入可能是以下两条 JSON 消息之一:

{
  "type": "Gizmo",
  "value": {
    "name": "Banana"
  }
}

{
  "type": "Widget",
  "value": {
    "widget_id": 7,
    "data": [4, 2, 6, 3]
  }
}

type您可以通过检查然后将其反序列化为value已知的 .NET 类型来决定如何反序列化传入消息。您可以使用以下方法执行此操作JToken

var input = JToken.Parse(jsonInput);
var type = input["type"].ToObject<string>();
if (type == "Gizmo")
{
    var gizmo = input["value"].ToObject<Gizmo>();
}
else if (type == "Widget")
{
    var widget = input["value"].ToObject<Widget>();
}
于 2015-04-07T17:00:00.200 回答