反序列化Json没有名称字段和格式字符串,数组

时间:2014-11-06 16:14:00

标签: c# .net json json.net deserialization

我有以下json对象:

[
   "sd",
   [
      "sdg\u0026e",
      "sdlc",
      "sdccu",
      "sdsu webportal",
      "sdsu",
      "sdsu blackboard",
      "sdcc",
      "sd card",
      "sdn",
      "sdro"
   ]
]

从Google建议获得此网址:

http://suggestqueries.google.com/complete/search?output=firefox&hl=en&q=sd

我尝试过像这样反序列化:

dynamic objson = JsonConvert.DeserializeObject(res);

但它没有用,因为我需要它成为一个类对象。

还使用类型:

public class SuggestClass
    {
        public string search { get; set; }
        public string[] terms { get; set; }
    }


var result = JsonConvert.DeserializeObject<SuggestClass>(res);

但它总是抛出异常。

如果没有名字字段,我不知道怎么办。

修改

另一个JSON:

["text",["textura","textos bonitos","texto argumentativo","textos","textos de amor","texto expositivo","texturas minecraft","textos de reflexion","texture pack minecraft","textos en ingles"]]

2 个答案:

答案 0 :(得分:1)

那很棘手......

但由于它是一个数组,您可以创建一个工厂方法来解析SuggestClass中的JArray

public void SomeMethod()
{
    string json =
        "[\"sd\",[\"sdg\u0026e\",\"sdlc\",\"sdccu\"" + 
        ",\"sdsu webportal\",\"sdsu\",\"sdsu blackboard\","+
        "\"sdcc\",\"sd card\",\"sdn\",\"sdro\"]]";

    var factory = new Factory();
    var suggest = factory.Create(json);

    Console.WriteLine(suggest);
}

public class Factory
{
    public SuggestClass Create(string json)
    {
        var array = JArray.Parse(json);
        string search = array[0].ToString();
        string[] terms = array[1].ToArray().Select(item => item.ToString()).ToArray();

        return new SuggestClass {Search = search, Terms = terms};
    }
}

public class SuggestClass
{
    public string Search { get; set; }
    public IEnumerable<string> Terms { get; set; }
    public override string ToString()
    {
        return string.Format("Search={0},Terms=[{1}]", 
            Search, string.Join(",", Terms));
    }
}

将打印到控制台:

Search=sd,Terms=[sdg&e,sdlc,sdccu,sdsu webportal,sdsu,sdsu blackboard,sdcc,sd card,sdn,sdro]

您提供的其他JSON:

Search=sd,Terms=[sdg&e,sdlc,sdccu,sdsu webportal,sdsu,sdsu blackboard,sdcc,sd card,sdn,sdro] Search=text,Terms=[textura,textos bonitos,texto argumentativo,textos,textos de amor,texto expositivo,texturas minecraft,textos de reflexion,texture pack minecraft,textos en ingles]

答案 1 :(得分:0)

刚刚在visual studio中使用了JSON可视化工具。这就是它的样子。

enter image description here

这是一个包含多种类型的数组。以下代码可用于解析它。但它还不完美。

var objson = JsonConvert.DeserializeObject<object[]>(res);

所以我认为@Mikko的答案有更好的方法..