2016-04-14 11 views
1

は、私はC#のオブジェクトにJSONをデシリアライズするJson.netを使用していますJSON列挙型リストのデシリアライゼーション

{ 
    "_id": "0FEB6D4B-8DA5-4143-B926-11A7AE4F3B12", 
    "device": { 
     "name": "test", 
     "family": "test" 
    }, 
    "channels": [ 
     { 
      "mcl": 33, 
      "vtype": "FLOAT", 
      "category": " Current" 
     }, 
     { 
      "tag": "OperationMode", 
      "vtype": "BYTE", 
      "enums": [ 
       { 
        "0": "Off" 
       }, 
       { 
        "1": "On" 
       }, 
       { 
        "2": "ByPass" 
       } 
      ] 
     } 
    ] 
} 

下にJSON等を有していて。私は列挙型リストを変換することができません。これが有効なJSONかどうかを検証しました。私はカスタムコンバータ&文字列コンバータで試しましたが、リーダーの値はnullです。クイックヘルプは感謝しています。

+2

はあなたがデシリアライズのために使用してコードを表示することができますか? –

+0

は有効なjsonではありません –

+1

あなたの期待する結果は何ですか?実行時に列挙型を作成するか、単純に値と名前のリストに変換しますか? – Toxantron

答えて

0
JObject jR = JObject.Parse(YourJsonString); 
JArray oR = (JArray)jR["channels"];  

JArray jA = (JArray)oR[1]["enums"]; 
foreach (var item in jA) 
{ 
    Dictionary<string,string> enums = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string,string>>(item.ToString());    
    foreach (var en in enums) 
    { 
     Console.WriteLine(en.Value); 
    } 
} 

フィドラー:https://dotnetfiddle.net/ziSep1

+1

ありがとうKrunal私は手動で構文解析がうまくいくことを知っています。私はこれをC#オブジェクトにマッピングしたいと思っていましたDevice&私はJson.netのサポートのようにこれを行う一般的な方法を望みますDevice device =デシリアライズ(json)&脱スケールを使用すると失敗します – amar

+0

だからあなたは何ですか? –

+0

varデバイス= JsonConvert.DeserializeObject (deviceJson、settings);私のために働いていない私は列挙型を解析するときに予期しないトークンStartObjectを取得します。 – amar