1

私はウィキデータの JSON オブジェクトを繰り返し処理しようとしていますが、ある程度までは成功しています。以下を解析しています: http://www.wikidata.org/wiki/Special:EntityData/Q319.json

次のようなコードを繰り返しています。

dynamic a = JsonConvert.DeserializeObject<dynamic>(wikidata_pageContents);
foreach (dynamic entity in a.entities) { 
    foreach (dynamic topLevelStructure in entity.Value) {
    ...

これは、次のような「クレーム」に到達するまで機能します。

{
    "mainsnak": {
        "snaktype": "value",
        "property": "P1036",
        "datavalue": {
            "value": "523.45",
            "type": "string"
        },
        "datatype": "string"
    },
    "type": "statement",
    "id": "Q319$5525e016-4210-bb2c-ce03-bd2dd52cca6c",
    "rank": "normal"
}

claim.Value で上記の JSON テキストを使用して以下を使用していますが、field_name は null です。

foreach (dynamic claimField in claim.Value)
{
    string field_name = claimField.Name;

上記のオブジェクトの値を動的に反復するにはどうすればよいですか? オブジェクト構造を確立して可能であれば逆シリアル化するよりも、むしろ反復したいと思います。

4

2 に答える 2

0

Name質問に示されている JSON オブジェクトにはフィールドがありません。したがって、プロパティにアクセスしmainsnak、そこから他のプロパティにアクセスすることをお勧めします。

foreach (dynamic claimField in claim.Value)
{
    var value = claimField.mainsnak.datavalue.value;
    var type = claimField.type;
    ...
}
于 2016-03-06T08:38:46.987 に答える