0

質問があります。複数のクライアントにサービスを提供できる ASP.NET Web アプリがあります。

<T>唯一の違いは、オブジェクトを WCF サービスに渡すために、アプリが JSON 文字列を型の .NET オブジェクトに変換する必要があることです。

その目的のために、私は 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

たとえば、入力が次の 2 つの JSON メッセージのいずれかであるとします。

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

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

を調べて既知の .NET 型にtype逆シリアル化することで、着信メッセージを逆シリアル化する方法を決定できます。value次を使用してこれを行うことができます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 に答える