私はいくつかのJSONを2種類用意しています。場合によってはlocation
の値は文字列であり、時にはそれがオブジェクトです。これは、最初の形式のサンプルである:JSON値は時には文字列であり、時にはオブジェクトです
{
"result": [
{
"upon_approval": "Proceed to Next Task",
"location": "",
"expected_start": ""
}
]
}
このため
クラス定義:ここ
public class Result
{
public string upon_approval { get; set; }
public string location { get; set; }
public string expected_start { get; set; }
}
public class RootObject
{
public List<Result> result { get; set; }
}
は、JSONは、第二のフォーマットである。このため
{
"result": [
{
"upon_approval": "Proceed to Next Task",
"location": {
"display_value": "Corp-HQR",
"link": "https://satellite.service-now.com/api/now/table/cmn_location/4a2cf91b13f2de00322dd4a76144b090"
},
"expected_start": ""
}
]
}
クラス定義:
public class Location
{
public string display_value { get; set; }
public string link { get; set; }
}
public class Result
{
public string upon_approval { get; set; }
public Location location { get; set; }
public string expected_start { get; set; }
}
public class RootObject
{
public List<Result> result { get; set; }
}
dese JSON形式がクラスと一致しないときにエラーが発生しますが、JSON形式が変更されるため、使用するクラスを事前に知る必要はありません。では、これらの2つのJSON形式を動的に1つのクラスセットに逆シリアル化する方法を教えてください。
JavaScriptSerializer ser = new JavaScriptSerializer();
ser.MaxJsonLength = 2147483647;
RootObject ro = ser.Deserialize<RootObject>(responseValue);
あなたの "result"配列には両方が含まれていますか? – Eser
@Eserいいえ、いずれかのクラス定義のみを含めることはできますが、jsonレスポンスは文字列またはクラスのいずれかを持っています。だから私はそれらの文字列の値を無視する方法を知りません。 –
[This(http://stackoverflow.com/questions/22052430/how-to-handle-json-that-returns-both-a-string-and-a-string-array)はヒントを与えることができます.. .. – Eser