【问题标题】:Deserialize Json with no name Fields and Format string, array反序列化没有名称字段和格式字符串、数组的 Json
【发布时间】:2014-11-06 16:14:00
【问题描述】:

我有以下 json 对象:

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

从 google 获得,使用此 URL 建议:

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"]]

【问题讨论】:

  • 这是一个正确的 JSON 对象吗?因为对我来说,它看起来像一个数组。不是一个实际的对象?无论如何,把钥匙放进去不是更好吗,显然你的SuggestClass 有属性,所以这意味着你的 JSON 可以有钥匙,不是吗?
  • 我从谷歌获得的。更新了网址来源
  • 这是有效的 JSON。它只是一个数组,第二个元素是一个数组。你可以在这里查看:jsonlint.com
  • 这可能不是一个完美的答案,但我会在用 C# 解析它之前将它变成一个合适的对象
  • 这可能会有所帮助:stackoverflow.com/questions/11126242/…

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


【解决方案1】:

这很棘手......

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

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&amp;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]

【讨论】:

  • 很棒的方法@Mikko Viitala
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多