基礎上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": "مرحبا"
}
]
}
- 只有2命名字段,相比於樣品JSON 3。
- 2個已命名的字段與類中的屬性匹配,我相信這對於
JavaScriptSerializer
類是強制的,以便它能夠正確映射值。 (其他圖書館如JSON.net可以解決這個限制。)
希望這有助於。
nameList是什麼樣子 –
public class nameList { public name [] Translator {get;組; } } –
爲什麼不使用newtonsoft.json? – Phiter