如何检索以下json字符串以分隔c#中的对象

时间:2016-05-20 11:31:18

标签: c# json

hotel_pricesURL = string_builder.ToString();               
RootobjectOne robjectOne = JsonConvert.DeserializeObject<RootobjectOne>(hotel_pricesURL);
List<OneStar> one_star_list = new List<OneStar>();
var check = robjectOne.onestar;
foreach(var items in check)
{

}

包括RootobjectOne类:

    public class RootobjectOne
    {
        [JsonProperty("OneStar")]
        public OneStar onestar { get; set; }

        [JsonProperty("TwoStar")]
        public TwoStar twostar { get; set; }
        [JsonProperty("ThreeStar")]
        public ThreeStar threestar { get; set; }
        [JsonProperty("FourStar")]
        public FourStar fourstar { get; set; }
        [JsonProperty("FiveStar")]
        public FiveStar fivestar { get; set; }


        public IEnumerator GetEnumerator()
        {
            return (IEnumerator)this;
        }

    }
    public class OneStar
    {
        public IEnumerator GetEnumerator()
        {
            return (IEnumerator)this;
        }


        [JsonProperty("median")]
        public string median { get; set; }

        [JsonProperty("lowest")]
        public string lowest { get; set; }


        [JsonProperty("value")]
        public string value { get; set; }
        //public string 
    }


  **this is the response from the web service**

 {
     "5 star": {
      "median": "134.04",
      "lowest": "83.57",
      "value": "134.04"
     },
     "1 star": {
      "median": "28.86",
      "lowest": "28.86",
      "value": "28.86"
     },
     "4 star": {
      "median": "76.35",
      "lowest": "36.71",
      "value": "76.35"
     },
     "2 star": {
      "median": "24.78",
      "lowest": "20.42",
      "value": "24.78"
     },
     "3 star": {
      "median": "37.65",
      "lowest": "20.33",
      "value": "37.65"
     }
    }

我收到错误说明

  

无法将'OneStar'类型的对象强制转换为'System.Collections.IEnumerator'

为什么呢?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,您的类正在实现,但不继承IEnumerable接口,因此它仍然不被视为集合。

其次,即使您继承了它,OneStar中也没有集合,也没有任何枚举。

第三,所有这些Json标志都不是必需的,因为你只是重新定义已经设置的默认值。

<强>解决方案

你需要一个额外的&#34;包装&#34;作为您的集合的类,或者只是省略可枚举集合的自定义实现(因为它不会从您需要的代码中显示),只需将包含该类的属性定义为集合:

public class RootobjectOne
{
    public List<OneStar> onestar { get; set; }
    public List<TwoStar> twostar { get; set; }
    public List<ThreeStar> threestar { get; set; }
    public List<FourStar> fourstar { get; set; }
    public List<FiveStar> fivestar { get; set; }
}