使用Json.NET进行反序列化

时间:2012-06-27 19:47:07

标签: c# json.net

如何将以下JSON反序列化为可以绑定到转发器的引用元素集合?


    {
       "query":{
          "count":3,
          "created":"2012-06-27T19:44:47Z",
          "lang":"en-US",
          "results":{
             "quote":[
                {
                   "symbol":"UAM",
                   "Ask":null,
                   "AverageDailyVolume":"262683",
                   "Bid":null,
                   "AskRealtime":"10.07",
                   "BidRealtime":"10.06",
                   "BookValue":"12.468",
                   "Change_PercentChange":"-0.24 - -2.33%",
                   "Change":"-0.24",
                   "Commission":null,
                   "ChangeRealtime":"-0.24",
                   "AfterHoursChangeRealtime":"N/A - N/A",
                   "DividendShare":"0.00",
                   "LastTradeDate":"6/27/2012",
                   "TradeDate":null,
                   "EarningsShare":"0.096",
                   "ErrorIndicationreturnedforsymbolchangedinvalid":null,
                   "EPSEstimateCurrentYear":"0.68",
                   "EPSEstimateNextYear":"0.77",
                   "EPSEstimateNextQuarter":"0.16",
                   "DaysLow":"10.06",
                   "DaysHigh":"10.33",
                   "YearLow":"8.79",
                   "YearHigh":"13.62",
                   "HoldingsGainPercent":"- - -",
                   "AnnualizedGain":null,
                   "HoldingsGain":null,
                   "HoldingsGainPercentRealtime":"N/A - N/A",
                   "HoldingsGainRealtime":null,
                   "MoreInfo":"cnpriIed",
                   "OrderBookRealtime":null,
                   "MarketCapitalization":"860.4M",
                   "MarketCapRealtime":null,
                   "EBITDA":"105.7M",
                   "ChangeFromYearLow":"+1.27",
                   "PercentChangeFromYearLow":"+14.45%",
                   "LastTradeRealtimeWithTime":"N/A - 10.06",
                   "ChangePercentRealtime":"N/A - -2.33%",
                   "ChangeFromYearHigh":"-3.56",
                   "PercebtChangeFromYearHigh":"-26.14%",
                   "LastTradeWithTime":"3:29pm - 10.06",
                   "LastTradePriceOnly":"10.06",
                   "HighLimit":null,
                   "LowLimit":null,
                   "DaysRange":"10.06 - 10.33",
                   "DaysRangeRealtime":"N/A - N/A",
                   "FiftydayMovingAverage":"10.0519",
                   "TwoHundreddayMovingAverage":"10.8884",
                   "ChangeFromTwoHundreddayMovingAverage":"-0.8284",
                   "PercentChangeFromTwoHundreddayMovingAverage":"-7.61%",
                   "ChangeFromFiftydayMovingAverage":"+0.0081",
                   "PercentChangeFromFiftydayMovingAverage":"+0.08%",
                   "Name":"Universal America",
                   "Notes":null,
                   "Open":"10.32",
                   "PreviousClose":"10.30",
                   "PricePaid":null,
                   "ChangeinPercent":"-2.33%",
                   "PriceSales":"0.40",
                   "PriceBook":"0.83",
                   "ExDividendDate":null,
                   "PERatio":"107.29",
                   "DividendPayDate":"19-Aug-10",
                   "PERatioRealtime":null,
                   "PEGRatio":"1.01",
                   "PriceEPSEstimateCurrentYear":"15.15",
                   "PriceEPSEstimateNextYear":"13.38",
                   "Symbol":"UAM",
                   "SharesOwned":null,
                   "ShortRatio":"4.80",
                   "LastTradeTime":"3:29pm",
                   "TickerTrend":" -==++- ",
                   "OneyrTargetPrice":"12.00",
                   "Volume":"491440",
                   "HoldingsValue":null,
                   "HoldingsValueRealtime":null,
                   "YearRange":"8.79 - 13.62",
                   "DaysValueChange":"- - -2.33%",
                   "DaysValueChangeRealtime":"N/A - N/A",
                   "StockExchange":"NYSE",
                   "DividendYield":null,
                   "PercentChange":"-2.33%"
                },
                {
                   "symbol":"WCG",
                   "Ask":null,
                   "AverageDailyVolume":"898853",
                   "Bid":null,
                   "AskRealtime":"49.72",
                   "BidRealtime":"49.68",
                   "BookValue":"27.418",
                   "Change_PercentChange":"-0.25 - -0.50%",
                   "Change":"-0.25",
                   "Commission":null,
                   "ChangeRealtime":"-0.25",
                   "AfterHoursChangeRealtime":"N/A - N/A",
                   "DividendShare":"0.00",
                   "LastTradeDate":"6/27/2012",
                   "TradeDate":null,
                   "EarningsShare":"6.77",
                   "ErrorIndicationreturnedforsymbolchangedinvalid":null,
                   "EPSEstimateCurrentYear":"5.42",
                   "EPSEstimateNextYear":"5.20",
                   "EPSEstimateNextQuarter":"1.51",
                   "DaysLow":"49.64",
                   "DaysHigh":"50.765",
                   "YearLow":"33.29",
                   "YearHigh":"74.41",
                   "HoldingsGainPercent":"- - -",
                   "AnnualizedGain":null,
                   "HoldingsGain":null,
                   "HoldingsGainPercentRealtime":"N/A - N/A",
                   "HoldingsGainRealtime":null,
                   "MoreInfo":"cnprmiIed",
                   "OrderBookRealtime":null,
                   "MarketCapitalization":"2.141B",
                   "MarketCapRealtime":null,
                   "EBITDA":"475.0M",
                   "ChangeFromYearLow":"+16.39",
                   "PercentChangeFromYearLow":"+49.23%",
                   "LastTradeRealtimeWithTime":"N/A - 49.68",
                   "ChangePercentRealtime":"N/A - -0.50%",
                   "ChangeFromYearHigh":"-24.73",
                   "PercebtChangeFromYearHigh":"-33.23%",
                   "LastTradeWithTime":"3:29pm - 49.68",
                   "LastTradePriceOnly":"49.68",
                   "HighLimit":null,
                   "LowLimit":null,
                   "DaysRange":"49.64 - 50.765",
                   "DaysRangeRealtime":"N/A - N/A",
                   "FiftydayMovingAverage":"55.0451",
                   "TwoHundreddayMovingAverage":"60.745",
                   "ChangeFromTwoHundreddayMovingAverage":"-11.065",
                   "PercentChangeFromTwoHundreddayMovingAverage":"-18.22%",
                   "ChangeFromFiftydayMovingAverage":"-5.3651",
                   "PercentChangeFromFiftydayMovingAverage":"-9.75%",
                   "Name":"Wellcare Health P",
                   "Notes":null,
                   "Open":"49.75",
                   "PreviousClose":"49.93",
                   "PricePaid":null,
                   "ChangeinPercent":"-0.50%",
                   "PriceSales":"0.33",
                   "PriceBook":"1.82",
                   "ExDividendDate":null,
                   "PERatio":"7.38",
                   "DividendPayDate":null,
                   "PERatioRealtime":null,
                   "PEGRatio":"0.58",
                   "PriceEPSEstimateCurrentYear":"9.21",
                   "PriceEPSEstimateNextYear":"9.60",
                   "Symbol":"WCG",
                   "SharesOwned":null,
                   "ShortRatio":"1.70",
                   "LastTradeTime":"3:29pm",
                   "TickerTrend":" =--==- ",
                   "OneyrTargetPrice":"73.10",
                   "Volume":"517119",
                   "HoldingsValue":null,
                   "HoldingsValueRealtime":null,
                   "YearRange":"33.29 - 74.41",
                   "DaysValueChange":"- - -0.50%",
                   "DaysValueChangeRealtime":"N/A - N/A",
                   "StockExchange":"NYSE",
                   "DividendYield":null,
                   "PercentChange":"-0.50%"
                },
                {
                   "symbol":"WLP",
                   "Ask":null,
                   "AverageDailyVolume":"2976430",
                   "Bid":null,
                   "AskRealtime":"69.70",
                   "BidRealtime":"69.67",
                   "BookValue":"70.91",
                   "Change_PercentChange":"+0.58 - +0.84%",
                   "Change":"+0.58",
                   "Commission":null,
                   "ChangeRealtime":"+0.58",
                   "AfterHoursChangeRealtime":"N/A - N/A",
                   "DividendShare":"1.076",
                   "LastTradeDate":"6/27/2012",
                   "TradeDate":null,
                   "EarningsShare":"7.265",
                   "ErrorIndicationreturnedforsymbolchangedinvalid":null,
                   "EPSEstimateCurrentYear":"7.78",
                   "EPSEstimateNextYear":"8.54",
                   "EPSEstimateNextQuarter":"2.02",
                   "DaysLow":"69.22",
                   "DaysHigh":"70.65",
                   "YearLow":"56.61",
                   "YearHigh":"80.90",
                   "HoldingsGainPercent":"- - -",
                   "AnnualizedGain":null,
                   "HoldingsGain":null,
                   "HoldingsGainPercentRealtime":"N/A - N/A",
                   "HoldingsGainRealtime":null,
                   "MoreInfo":"cnprmiIed",
                   "OrderBookRealtime":null,
                   "MarketCapitalization":"23.052B",
                   "MarketCapRealtime":null,
                   "EBITDA":"4.991B",
                   "ChangeFromYearLow":"+13.07",
                   "PercentChangeFromYearLow":"+23.09%",
                   "LastTradeRealtimeWithTime":"N/A - 69.68",
                   "ChangePercentRealtime":"N/A - +0.84%",
                   "ChangeFromYearHigh":"-11.22",
                   "PercebtChangeFromYearHigh":"-13.87%",
                   "LastTradeWithTime":"3:29pm - 69.68",
                   "LastTradePriceOnly":"69.68",
                   "HighLimit":null,
                   "LowLimit":null,
                   "DaysRange":"69.22 - 70.65",
                   "DaysRangeRealtime":"N/A - N/A",
                   "FiftydayMovingAverage":"67.8471",
                   "TwoHundreddayMovingAverage":"67.6942",
                   "ChangeFromTwoHundreddayMovingAverage":"+1.9858",
                   "PercentChangeFromTwoHundreddayMovingAverage":"+2.93%",
                   "ChangeFromFiftydayMovingAverage":"+1.8329",
                   "PercentChangeFromFiftydayMovingAverage":"+2.70%",
                   "Name":"WellPoint, Inc. C",
                   "Notes":null,
                   "Open":"69.40",
                   "PreviousClose":"69.10",
                   "PricePaid":null,
                   "ChangeinPercent":"+0.84%",
                   "PriceSales":"0.37",
                   "PriceBook":"0.97",
                   "ExDividendDate":"Jun  6",
                   "PERatio":"9.51",
                   "DividendPayDate":"Jun 25",
                   "PERatioRealtime":null,
                   "PEGRatio":"0.88",
                   "PriceEPSEstimateCurrentYear":"8.88",
                   "PriceEPSEstimateNextYear":"8.09",
                   "Symbol":"WLP",
                   "SharesOwned":null,
                   "ShortRatio":"2.90",
                   "LastTradeTime":"3:29pm",
                   "TickerTrend":" ==-=== ",
                   "OneyrTargetPrice":"82.89",
                   "Volume":"3187310",
                   "HoldingsValue":null,
                   "HoldingsValueRealtime":null,
                   "YearRange":"56.61 - 80.90",
                   "DaysValueChange":"- - +0.84%",
                   "DaysValueChangeRealtime":"N/A - N/A",
                   "StockExchange":"NYSE",
                   "DividendYield":"1.56",
                   "PercentChange":"+0.84%"
                }
             ]
          }
       }
    }

我正在使用C#而无法弄清楚如何构造类结构以获取提取的Quote对象列表。这是我试过的:

    public class Container
    {
        [JsonProperty("query")]
        public Query Data { get; set; }
    }

    public class Query
    {
        [JsonProperty("count")]
        public int Count { get; set; }
        [JsonProperty("created")]
        public DateTime Created { get; set; }
        [JsonProperty("lang")]
        public string Lang { get; set; }
        [JsonProperty("results")]
        public List Results { get; set; }
    }

    public class Quote
    {
        [JsonProperty("symbol")]
        public string Symbol { get; set; }
        [JsonProperty("Ask")]
        public string Ask { get; set; }
        [JsonProperty("AverageDailyVolume")]
        public string AverageDailyVolume { get; set; }
    }

1 个答案:

答案 0 :(得分:1)

不知道这对你现在是否有帮助,但你的问题是你的json不符合你的对象模型。要使用包含结果列表的Query对象反序列化回Container对象,结果json应如下所示:

 "results": [
  {
    "symbol": "UAM",
    "Ask": null,
    "AverageDailyVolume": "262683"
  },
  {
    "symbol": "WCG",
    "Ask": null,
    "AverageDailyVolume": "898853"
  },
  {
    "symbol": "WLP",
    "Ask": null,
    "AverageDailyVolume": "2976430"
  }
]

但你的json看起来像这样:

"results":{
         "quote":[
            {
               "symbol":"UAM",
               "Ask":null,
               "AverageDailyVolume":"262683",
            }
          ]
 }

“quote”属性正在弄乱它。因此,为了映射这个,您必须更改源json或实现某种具有属性“quote”的自定义列表....或者您手动反序列化它。但原生json会将对象展开为

{
   ...Some object
} 

而不是:

"myobject" : {
    ...Some object.
} 

在集合内。

相关问题