2016-11-19 67 views
0

我的JSON格式是這樣 -讀取數據

{ 
"data": { 
    "translations": [ 
    { 
    "translatedText": "مرحبا" 
    } 
    ] 
} 
} 

我不想使用json.net閱讀翻譯文本值。 但它總是返回空值。

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

nameList是什麼樣子 –

+0

public class nameList { public name [] Translator {get;組; } } –

+0

爲什麼不使用newtonsoft.json? – Phiter

回答

1

公共類名稱列表{公共名稱[] {譯者獲得;組; }}

這是一個不正確的類來映射Json。


嘗試這些類反序列化JSON和它的工作完美的罰款:

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屬性:

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

完美的作品謝謝....忘記提及早前 –

+0

@AnoopMishra你應該將答案標記爲接受的情況下,它是;-),不客氣:-) – Jim

-1

基礎上nameList類(從評論)這個JSON被轉換成了,並且提供了示例JSON,返回值爲null的原因是下降到Deserialize方法無法映射到類。

從提供的信息中,我重新創建了必要的類。

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

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

我則嘗試將提供JSON解析爲使用這些類以下

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); 
} 

在執行時,下面是輸出到控制檯。

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

這意味着返回值爲空。

如前所述,這是由於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。

所以,讓我們仔細分析這...

{ "Translator": [ 
     { 
      "TranslatedText": "مرحبا" 
     } 
    ] 
} 
  1. 只有2命名字段,相比於樣品JSON 3。
  2. 2個已命名的字段與類中的屬性匹配,我相信這對於JavaScriptSerializer類是強制的,以便它能夠正確映射值。 (其他圖書館如JSON.net可以解決這個限制。)

希望這有助於。