使用System.Web.Script.Serialization或System.Web。*库解析带有多语言文本的JSON

时间:2012-08-23 15:31:18

标签: c# asp.net .net json rest

我有asked this question before。使用Newtonsoft的解决方案效果很好,直到我在网站托管服务器上部署了网站giving me nightmares。因此,我打算使用一些System.Web库,这样我就不必处理* .dll等,我可以轻松部署我的网站。

有人可以使用System.Web.Script.Serialization或任何System library帮助我parse the same json output吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我希望你的真正的json字符串是有效的,因为你发布的字符串已损坏,但Json.Net容忍它。

唯一的技巧是反序列化为这个有趣的类型List<Dictionary<string,object>>

以下是更正后的json(已移除尾随, s)

的示例
string json = @"[ { ""ew"" : ""bharat"", ""hws"" : [ ""\u092D\u093E\u0930\u0924"",""\u092D\u0930\u0924"",""\u092D\u0930\u093E\u0924"",""\u092D\u093E\u0930\u093E\u0924"",""\u092C\u0939\u0930\u0924"" ] }, { ""ew"" : ""india"", ""hws"" : [ ""\u0907\u0902\u0921\u093F\u092F\u093E"",""\u0907\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0923\u094D\u0921\u093F\u092F\u093E"",""\u0908\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0928\u0921\u093F\u092F\u093E"" ] } ]";
var list = new JavaScriptSerializer().Deserialize<List<Dictionary<string,object>>>(json);

foreach (var dict in list)
{
    var ew  = (string)dict["ew"];
    var firstValOfHws = ((ArrayList)dict["hws"])[0];
}

<强> - 编辑 -

好的,这应该有效

var serializer = new DataContractJsonSerializer(typeof(List<Result>));
var result = (List<Result>)serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json)));

public class Result
{
    public string ew;
    public List<string> hws;
}