System.Net.Http.HttpClient、the version currently available in NuGet、 を使用して、json形式のサービスからデータを取得しています。データは、おおよそ次のようになります。このデータスキーマでReadAsAsync <T>を使用するにはどうすればよいですか?
{
"schema": "Listing",
"data": {
"key": "28ba648c-de24-45d4-a7d9-70f810cf5438",
"children": [{
"kind": "type1",
"data": {
"body": "Four score and seven years ago...",
"parent_id": "2qh3l",
"report_count": 0,
"name": "c4j6yeh"
}
}, {
"kind": "type3",
"data": {
"domain": "abc.def.com",
"flagged": true,
"category": "news",
"saved": false,
"id": "t3dz0",
"created": 1335998011.0
}
}]
}
}
私はオブジェクトグラフにそのJSON文字列をデシリアライズするHttpContentExtensions.ReadAsAsync<T>
を使用しています。型定義おおよそ次のようになります。
public class Response
{
public String schema { get;set; }
public ListingData data { get;set; }
}
public class ListingData
{
public string key { get;set; }
public List<OneItem> children { get;set; }
}
は、ここで問題です:私はkind
性質に応じて変化することがchildren
にアイテムの種類を望みます。 kind
が "type1"の場合、オブジェクトを逆シリアル化したいとします... Type1
としましょう。 kind
が "type3"の場合、タイプType3
のオブジェクトが必要です。
今、List<Type1>
またはList<Type3>
を逆シリアル化できますが、デシリアライゼーションロジックに2つを区別する方法を知らせていません。
"type1"データオブジェクトと "type3"データオブジェクトのすべてのプロパティを1つの.NETタイプにマージできます。しかし、プロパティの数は、これが乱雑になるほど十分に大きいです。 (この場合はdata
で)JSONのプロパティの名前が異なっていた場合は
、私はそれを使用して区別することができます。例えば、データがこのように見えた、場合:
"children": [{
"kind": "type1",
"t1data": { ... }
}, {
"kind": "type3",
"t3data": { ... }
}]
...その後、私は.NETでこのような何かを行うことができます:
public class OneItem
{
public string kind { get;set; }
public Type1 t1data { get;set; }
public Type3 t3data { get;set; }
}
しかし、私のデータスキーマは、そのようには見えません。
データの内容によって逆シリアル化のタイプを選択できますか?つまり、 は、あるプロパティ(この場合はkind
)の値を調べて、別のプロパティ(この場合はdata
)の内容を逆シリアル化する方法を決定します。
それともReadAsAsyncがそれをデシリアライズしようとする前に、JSONに作用するフィルタやトランスを注入することができますか?
もしそうなら、どのように?