我有一个问题,我们有一个可以为多个客户提供服务的ASP.NET网络应用。
唯一的区别是应用程序需要将一些JSON字符串转换为类型为<T>
的.NET对象,以便将该对象传递给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可能具有不同的结构。
实现这一目标的最佳方法是什么?
感谢。
答案 0 :(得分: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>();
}