основы 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
не запускался). Так что давайте посмотрим, что JSON может быть отображено путем преобразования экземпляра nameList
.
// 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": "مرحبا"
}
]
}
- Существует только два названные поля, по сравнению с 3 в образце JSON.
- 2 названных поля соответствуют свойствам в классах, я считаю, что это необходимо для класса
JavaScriptSerializer
, чтобы он правильно отображал значения. (Другие библиотеки, такие как JSON.net, имеют способы обойти это ограничение.)
Надеюсь, это помогло.
Что такое nameList выглядит как –
public class nameList { общественное имя [] Переводчик {get; задавать; } } –
Почему бы не использовать newtonsoft.json? – Phiter