Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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

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
当存在多个键时,将JSON映射到C#类_C#_Json_Parsing_Json.net_Mapping - Fatal编程技术网

当存在多个键时,将JSON映射到C#类

当存在多个键时,将JSON映射到C#类,c#,json,parsing,json.net,mapping,C#,Json,Parsing,Json.net,Mapping,我目前正试图解析从IEXAPI返回的JSON数据,该数据由股票及其信息组成。我遇到的问题是,根据哪些股票/符号(即AAPL、GOOGL等),您请求返回的密钥更改为该符号。返回的JSON示例如下所示: 为了反序列化,我使用JSON.NET和以下类: public class Stock { public quote Quote { get; set;} public chart Chart { get; set;} } public class Root { publi

我目前正试图解析从IEXAPI返回的JSON数据,该数据由股票及其信息组成。我遇到的问题是,根据哪些股票/符号(即AAPL、GOOGL等),您请求返回的密钥更改为该符号。返回的JSON示例如下所示:

为了反序列化,我使用JSON.NET和以下类:

public class Stock  {
    public quote Quote { get; set;}
    public chart Chart { get; set;}
}

public class Root {
    public Stock[] Stock;
}
然后我还为quote和chart对象创建了类。然后,我使用以下命令反序列化JSON:

var stocks =  JsonConvert.DeserializeObject<Root>(jsonstring);
var stocks=jsoninvert.DeserializeObject(jsonstring);

但是,这不起作用,但在将“Stock”类重命名为其中一个符号名时,这确实起作用,但随后只解析符号JSON。我不知道这里发生了什么,所以非常感谢您的帮助

您的问题是您的类模型与API输出的json模式不匹配。输出不是股票列表,而是StockName:Stock的映射


您可以将其反序列化为
字典
,而不是
,这应该可以满足您的需要。

您的问题是您的类模型与API输出的json模式不匹配。输出不是股票列表,而是StockName:Stock的映射


您可以将它反序列化为
字典
,而不是
,这应该可以让您达到需要的位置。

既然您使用的是iextrading,您是否考虑过使用已经构建的库,这样您就不必构建结构了?请参阅反序列化到
字典,如或中所示。您可以创建如下类:公共类AAPL{[JsonProperty(“quote”)]public quote;}公共类根{[JsonProperty(“AAPL”)]public AAPL Appl;}public类Quote{[JsonProperty(“symbol”)]public string symbol;//其他属性..}从API获取数据的方法:static async Task getStocks(){HttpClient=new HttpClient();HttpResponseMessage response=await client.GetAsync(“);response.EnsureAccessStatusCode();string responseBody=await response.Content.ReadAsStringAsync();return responseBody;}我创建了一个简单的控制台应用程序,您可以在Main方法中进行如下转换:static void Main(string[]args){var data=getStocks().GetAwaiter().GetResult();var res=JsonConvert.DeserializeObject(数据);//获取反序列化数据的另一种方法动态填充=JsonConvert.DeserializeObject(数据);var obj1=stuff.AAPL;var obj2=stuff.AAPL.quote;var obj3=stuff.AAPL.quote.symbol;}由于您使用的是iextrading,您是否考虑过使用已经构建的库,以便不必构建结构?请参阅反序列化到
字典
,如或所示。您可以创建如下类:public class AAPL{[JsonProperty(“quote”)]public quote;}公共类根{[JsonProperty(“AAPL”)]public AAPL Appl;}公共类Quote{[JsonProperty(“symbol”)]public string symbol;//其他属性..}从API获取数据的方法:静态异步任务getStocks(){HttpClient client=new HttpClient();HttpResponseMessage response=await client.GetAsync(“);response.ensureccessstatuscode();string responseBody=await response.Content.ReadAsStringAsync();return responseBody;}我创建了一个简单的控制台应用程序,您可以在Main方法中进行如下转换:static void Main(string[]args){var data=getStocks().GetAwaiter().GetResult();var res=JsonConvert.DeserializeObject(data);//获取反序列化数据的另一种方法动态stuff=JsonConvert.DeserializeObject(数据);var obj1=stuff.AAPL;var obj2=stuff.AAPL.quote;var obj3=stuff.AAPL.quote.symbol;}