【问题标题】:Deserialize multiple Values C#反序列化多个值 C#
【发布时间】:2022-01-05 15:28:12
【问题描述】:

这是我从 API 调用中获得的字符串:

{"AAPL":{"price":180.38},"FB":{"price":349.37},"TSLA":{"price":1212.15}}

我想将此字符串反序列化为列表或字典或类似的东西。 这是我认为可行的方法:

public Dictionary<string, double> LoadMultiplePrice(string symbols)
    {
        using (var webClient = new WebClient())
        {
            var rawData = webClient.DownloadString($"https://sandbox.iexapis.com/stable/stock/market/batch?&types=price&symbols={symbols}&token={ApiKey}");
            var selectiveList = JsonConvert.DeserializeObject<Dictionary<string, double>>(rawData);
            return selectiveList;
        }
    }

或者这个:

public List<SinglePriceList> LoadMultiplePrice(string symbols)
    {
        using (var webClient = new WebClient())
        {
            var rawData = webClient.DownloadString($"https://sandbox.iexapis.com/stable/stock/market/batch?&types=price&symbols={symbols}&token={ApiKey}");
            var selectiveList = JsonConvert.DeserializeObject<List<SinglePriceList>>(rawData);
            return selectiveList;
        }
    }

public class SinglePriceList
{
    private double price { get; set; }
}

我收到以下错误:

Newtonsoft.Json.JsonSerializationException:

...将 JSON 更改为 JSON 数组(例如 [1,2,3])...

Newtonsoft.Json.JsonReaderException:

...解析值时遇到意外字符:{。路径“AAPL”,第 1 行,位置 9...

【问题讨论】:

  • 你确定private double price ... 应该是私人的吗?
  • 啊,没看到,但现在我尝试公开,但仍然:Newtonsoft.Json.JsonSerializationException: ...将 JSON 更改为 JSON 数组(例如 [1,2,3]) ...
  • JsonConvert.DeserializeObject&lt;Dictionary&lt;string, SinglePriceList&gt;&gt;(rawData)
  • 谢谢你的作品!你对如何使它更小有什么建议吗?对我来说,只用一个属性(“价格”)创建一个课程似乎有点过头了????我找不到任何东西????‍♂️。
  • @maccettura 好的,如果是这样的话,我可以忍受。也谢谢你。

标签: c# json serialization


【解决方案1】:

试试这个

var jsonParsed = JObject.Parse(rawData);

 Dictionary<string,double> stockPricesDict = jsonParsed.Properties()
.ToDictionary(p => p.Name, p=> (double)p.Value["price"] );

stockPrices 字典(json 格式)

{
  "AAPL": 180.38,
  "FB": 349.37,
  "TSLA": 1212.15
}

如何使用

var priceFB= (double) stockPricesDict["FB"];    // =349.37

或者你可以输入它

List<StockPrice> stockPricesList = jsonParsed.Properties()
.Select(p => new  { Name = p.Name, Price = (double)p.Value["price"] }).ToList();

股票价格列表

[
  {
    "Name": "AAPL",
    "Price": 180.38
  },
  {
    "Name": "FB",
    "Price": 349.37
  },
  {
    "Name": "TSLA",
    "Price": 1212.15
  }
]

如何使用

var priceFB=stockPricesList.FirstOrDefault(i=> i.Name=="FB").Price; // =349.37

public class StockPrice
{
    public string Name { get; set; }
    public double Price {get; set;}
}

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多