【问题标题】:How to retrieve following json string to separate objects in c#如何检索以下json字符串以分隔c#中的对象
【发布时间】:2016-05-20 11:31:18
【问题描述】:
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”类型

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

【问题讨论】:

  • 我在断点的 foreach 循环中收到此错误,并且此操作导致拖向 GetEnumerator() 方法
  • 请提供minimal reproducible example - robjectOne 是什么?
  • 你能告诉我们你的RootobjectOne类的代码吗?
  • 没有 JSON 很难说,但显然 onestar 是不可枚举的(List、IEnumerable 等)
  • 嗨! Henrik Ilgen 我已经添加了 RootobjectOne 类,请参考下面的代码

标签: c# json


【解决方案1】:

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

第二,即使你继承了它,你在 OneStar 中也没有任何集合,也没有什么可枚举的。

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

解决方案

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

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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多