2016-11-19 69 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可以解决这个限制。)

希望这有助于。