基础上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