2016-11-19 8 views
0

マイJSON形式は次のようです。 ですが、常にnull値を返します。JSON配列からデータを読み込む

JavaScriptSerializer ser = new JavaScriptSerializer(); 
      nameList myNames = ser.Deserialize<nameList>(json); 
+1

名前リストはどのようなものですか –

+0

public class nameList { public name [] Translator {get;セット; } } –

+0

なぜnewtonsoft.jsonを使用しないのですか? – Phiter

答えて

1

パブリッククラス名前リスト{パブリック名[]翻訳{取得します。セット; }}

これは、Jsonをマップするクラスが正しくありません。


JSONをデシリアライズするためにこれらのクラスを試してみて、それは完全に正常に動作します:nameListクラスに基づいて

var text = myNames.data.translations[0].translatedText; 
+0

は完璧に感謝しています....先に触れたことを忘れていました –

+0

@AnoopMishraあなたは答えが「;-)」だった場合にマークする必要があります。 – Jim

-1

(から:

public class Translation 
{ 
    public string translatedText { get; set; } 
} 

public class Data 
{ 
    public List<Translation> translations { get; set; } 
} 

public class nameList 
{ 
    public Data data { get; set; } 
} 

translatedTextプロパティに到達コメント)をJSONが変換され、サンプルJSONが提供されている場合、戻り値がnullである理由はDeserializeメソッドはクラスにマップできません。

提供された情報から、必要なクラスを再作成しました。

class nameList { 
    public name[] Translator { get; set; } 
} 

class name { 
    public string TranslatedText { get; set; } 
} 

私は、実行には、次の

var serializer = new JavaScriptSerializer(); 
// The json data, in one line 
string json = "{\"data\":{\"translations\":[{\"translatedText\": \"مرحبا\"}]}}"; 

// Convert back into object similar to described 
nameList myNames = serializer.Deserialize<nameList>(json); 

try { 
    // Attempt to access 
    Console.WriteLine(myNames.Translator[0]); 
} 
catch (Exception ex) { 
    Console.WriteLine("Fail:" + ex.Message); 
} 

を使用して、これらのクラスに提供JSONを解析しようとしましたが、以下は、コンソールに出力しました。

Fail: Object reference not set to an instance of an object. 

戻り値がnullだったことを意味します。

前述のように、これはDeserializeメソッドがクラスにマップできないためです。 (InvalidOperationExceptionがトリガーしなかったのは不思議ですが)nameListのインスタンスを変換することでJSONをどのようにマッピングできるかを確認できます。

// Manually created object 
nameList myNames = new nameList() { 
    Translator = new name[] { 
     new name() { TranslatedText = "مرحبا" } 
    } 
}; 

// Convert to JSON 
string json = serializer.Serialize(myNames); 
Console.WriteLine("JSON:\n" + json); 

実行時に、以下が出力されました。

JSON: 
{"Translator":[{"TranslatedText":"?????"}]} 

は別にVSCodeデバッグコンソールがその言語をサポートしていないという明白な事実から、我々はいくつかの非常に異なるJSONに直面しています。

だから、サンプルJSON中3に比べてわずか2という名前のフィールドが、あり

{ "Translator": [ 
     { 
      "TranslatedText": "مرحبا" 
     } 
    ] 
} 
  1. ...これを分析することができます。
  2. 2つの名前付きフィールドはクラスのプロパティと一致しますが、これは値を正しくマップするためにはJavaScriptSerializerクラスで必須です。 (JSON.netのような他のライブラリにはこの制限があります。)

うまくいけば、これは役に立ちました。

関連する問題