从 json 数组读取数据
Reading data from json array
我的 json 格式是 -
{
"data": {
"translations": [
{
"translatedText": "مرحبا"
}
]
}
}
我想在不使用 json.net 的情况下阅读翻译后的文本值。
但它总是 returns 空值。
JavaScriptSerializer ser = new JavaScriptSerializer();
nameList myNames = ser.Deserialize<nameList>(json);
public class nameList { public name[] Translator { get; set; } }
将 Json 映射到的 class 不正确。
尝试这些 classes 来反序列化 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;
根据 nameList
class(来自评论),这个 JSON 被转换成,样本 JSON 提供,returned 值为空是因为 Deserialize
方法无法映射到 class.
根据提供的信息,我重新创建了必要的 classes。
class nameList {
public name[] Translator { get; set; }
}
class name {
public string TranslatedText { get; set; }
}
然后我尝试使用以下
将提供的 JSON 解析为那些 classes
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.
表示 return 值为空。
如前所述,这是由于 Deserialize
方法无法映射到 class。 (虽然很奇怪 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": "مرحبا"
}
]
}
- 只有 2 个命名字段,而示例中有 3 个 JSON。
- 2 个命名字段与 classes 中的属性匹配,我相信这对于
JavaScriptSerializer
class 是强制性的,以便它正确映射值。 (其他库,如 JSON.net 有办法绕过这个限制。)
希望这对您有所帮助。
我的 json 格式是 -
{
"data": {
"translations": [
{
"translatedText": "مرحبا"
}
]
}
}
我想在不使用 json.net 的情况下阅读翻译后的文本值。 但它总是 returns 空值。
JavaScriptSerializer ser = new JavaScriptSerializer();
nameList myNames = ser.Deserialize<nameList>(json);
public class nameList { public name[] Translator { get; set; } }
将 Json 映射到的 class 不正确。
尝试这些 classes 来反序列化 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;
根据 nameList
class(来自评论),这个 JSON 被转换成,样本 JSON 提供,returned 值为空是因为 Deserialize
方法无法映射到 class.
根据提供的信息,我重新创建了必要的 classes。
class nameList {
public name[] Translator { get; set; }
}
class name {
public string TranslatedText { get; set; }
}
然后我尝试使用以下
将提供的 JSON 解析为那些 classesvar 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.
表示 return 值为空。
如前所述,这是由于 Deserialize
方法无法映射到 class。 (虽然很奇怪 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": "مرحبا"
}
]
}
- 只有 2 个命名字段,而示例中有 3 个 JSON。
- 2 个命名字段与 classes 中的属性匹配,我相信这对于
JavaScriptSerializer
class 是强制性的,以便它正确映射值。 (其他库,如 JSON.net 有办法绕过这个限制。)
希望这对您有所帮助。