Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将复杂Json对象反序列化到字典_C#_Json_Deserialization - Fatal编程技术网

C# 将复杂Json对象反序列化到字典

C# 将复杂Json对象反序列化到字典,c#,json,deserialization,C#,Json,Deserialization,我在反序列化Json字符串以在当前编写的api包装器中使用时遇到了一些问题。这是有问题的json字符串: { "Search":[ { "Title":"Clerks.", "Year":"1994", "imdbID":"tt0109445", "Type":"movie" }, { "Title":"Clerks II", "Year":"20

我在反序列化Json字符串以在当前编写的api包装器中使用时遇到了一些问题。这是有问题的json字符串:

{
   "Search":[
      {
         "Title":"Clerks.",
         "Year":"1994",
         "imdbID":"tt0109445",
         "Type":"movie"
      },
      {
         "Title":"Clerks II",
         "Year":"2006",
         "imdbID":"tt0424345",
         "Type":"movie"
      }
   ]
}
这是我目前用来处理它的方法

public static Dictionary<string, string> FetchTitlesListDictionary(string searchQuery)
{
    string searchResult = SendRequest(new[] { "?s=", searchQuery });
    JObject parser = JObject.Parse(searchResult);
    var movieDictionary = new Dictionary<string, string>();
    for (int i = 0; i < parser["Search"].Count(); i++)
    {
        if (!movieDictionary.ContainsKey((string)parser["Search"][i]["imdbID"]))
        {
            movieDictionary.Add((string)parser["Search"][i]["imdbID"],
                (string)parser["Search"][i]["Title"]);
        }
    }
    return movieDictionary;
}
公共静态词典fetchTitleListDictionary(字符串搜索查询)
{
字符串searchResult=SendRequest(新[]{?s=“,searchQuery});
JObject parser=JObject.Parse(searchResult);
var movieDictionary=新字典();
for(int i=0;i
尽管上面的代码可以工作,但我觉得它可以以某种方式变得更简单

我将如何实现这一目标

谢谢

var obj = JsonConvert.DeserializeObject<RootObject>(searchResult);

PS:请参见

如果您愿意不使用默认序列化程序,我只需打开包管理器控制台并键入

安装软件包ServiceStack.Text

然后它就变得简单了

var myDictionary = JsonObject.Parse(myJsonString)
          .ArrayObjects("Search")
          .ToDictionary(key => key.Get("imdbID"), value => value.Get("Title"));
使用newtonsoft serializer可能会有一种类似且同样简单的方法,但老实说,我从未使用过它,所以我不确定

同样和EZI的回答一样,如果你有他创造的物体,那么你就可以

var myObject = myJsonString.FromJson<RootObject>();

//if you want the dictionary it's the same thing, standard linq
var dictionary = myObject.Search.ToDictionary(x => x.imdbId, x => x.Title);
var myObject=myJsonString.FromJson();
//如果你想要这本字典,它是一样的,标准linq
var dictionary=myObject.Search.ToDictionary(x=>x.imdbId,x=>x.Title);

但是如果你只需要一本字典,我就用上面的方法,它既快又简单。

谢谢!我决定按照你建议的方案去做。它就像一个符咒。谢谢你的回答和链接!不过,我宁愿使用字典的原因是,我打算在未来的项目中重用此代码。所以,我需要这个类是独立的。
var myDictionary = JsonObject.Parse(myJsonString)
          .ArrayObjects("Search")
          .ToDictionary(key => key.Get("imdbID"), value => value.Get("Title"));
var myObject = myJsonString.FromJson<RootObject>();

//if you want the dictionary it's the same thing, standard linq
var dictionary = myObject.Search.ToDictionary(x => x.imdbId, x => x.Title);