C# 将复杂Json对象反序列化到字典
我在反序列化Json字符串以在当前编写的api包装器中使用时遇到了一些问题。这是有问题的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
{
"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);