2013-04-16 99 views
0

我掙扎了一下這個JSON,我的第一個錯誤是:如何返回1個JSON數據

$exception {"Error converting value 167 to type 'Web.Domain.Ean.HotelList'. Path '', line 1, position 3."} System.Exception {Newtonsoft.Json.JsonSerializationException} 

所以我一直在努力試圖得到它的工作方式不同,現在我認爲我已經完成了我的代碼,現在我得到這個錯誤。

Cannot implicitly convert type 'string' to 'System.Collections.Generic.IEnumerable<Web.Domain.Ean.HotelCount>' 

任何人都可以用一雙嶄新的眼睛關閉,請看一看,看看他們是否能與錯誤幫助,如果可能,也解釋一些JSON理論幫助我學習。

public class HotelCount 
{ 
    public string ActivePropertyCount { get; set; } 
} 

public IEnumerable<HotelCount> GetNumberOfHotels() 
{ 
    var numberOfHotelCount = GetHotelsFromEan.GetListOfHotels(); 
    var root = JObject.Parse(numberOfHotelCount.ToString()); 
    IList<JToken> hotelCount = root["HotelListResponse"]["HotelList"].Children().ToList(); 

    IList<HotelCount> count = new List<HotelCount>(); 
    foreach (JToken hotel in hotelCount) 
    { 
     HotelCount countHotels = JsonConvert.DeserializeObject<HotelCount>(hotel.ToString()); 
     count.Add(countHotels); 
    } 

    var t = count.FirstOrDefault(); 
    //IList<HotelCount> numberOfHotels = hotelCount.Select(count => JsonConvert 
    //        .DeserializeObject<HotelCount>(
    //        count.SingleOrDefault().ToString())).ToList(); 
    return t.ActivePropertyCount; 
} 

感謝 喬治

=========================更新代碼========= ======================

public string GetNumberOfHotels() 
     { 
      var numberOfHotelCount = GetHotelsFromEan.GetListOfHotels(); 
      var root = JObject.Parse(numberOfHotelCount.ToString()); 

      IList<JToken> hotelCount = root["HotelListResponse"]["HotelList"].Children().ToList(); 

      IList<HotelCount> count = hotelCount.Select(hotel => JsonConvert.DeserializeObject<HotelCount>(hotel.ToString())).ToList(); 


      return count.ToString(); 
     } 

===================== =========新更新================================

json值格式爲{「@activePropertyCount」:「167」,「

所以我的課程是:

public class HotelCount 
    { 
     public string ActivePropertyCount { get; set; } 
    } 

我最後的錯誤是。

消息=錯誤轉換值167以鍵入'Web.Domain.Ean.HotelCount' 消息=無法強制轉換或從System.Int64轉換爲Web.Domain.Ean.HotelCount。

所以,如果我回到下面的代碼,需要做回ActivePropertyCount

public IEnumerable<HotelCount> GetNumberOfHotels() 
     { 
      var numberOfHotelCount = GetHotelsFromEan.GetListOfHotels(); 
      var root = JObject.Parse(numberOfHotelCount.ToString()); 

      IList<JToken> hotelCount = root["HotelListResponse"]["HotelList"].Children().ToList(); 

      IList<HotelCount> count = new List<HotelCount>(); 
      foreach (JToken hotel in hotelCount) 
      { 
       HotelCount countHotels = JsonConvert.DeserializeObject<HotelCount>(hotel.FirstOrDefault().ToString()); 
       count.Add(countHotels); 
      } 

      return count; 

     } 

的價值是什麼================== ====修正它=========================

public string GetNumberOfHotels() 
     { 
      var numberOfHotelCount = GetHotelsFromEan.GetListOfHotels(); 
      var root = JObject.Parse(numberOfHotelCount.ToString()); 

      IList<JToken> hotelCount = root["HotelListResponse"]["HotelList"].Children().Values().ToList(); 

      var s = hotelCount.FirstOrDefault(); 
      var t = s; 

      // IList<HotelCount> count = hotelCount.Select(hotel => JsonConvert.DeserializeObject<HotelCount>(hotel.FirstOrDefault().ToString()).ActivePropertyCount).ToList(); 

      return t.ToString(); 

     } 

回答

0

真的不知道你有什麼,但試試這個(猜測jToken屬性爲ActivePropertyCount,但按需要替換):

public string GetNumberOfHotels() 
{  
    var numberOfHotelCount = GetHotelsFromEan.GetListOfHotels(); 
    var root = JObject.Parse(numberOfHotelCount.ToString()); 

    // Get list of hotels 
    IList<JToken> hotels = root["HotelListResponse"]["HotelList"].Children().ToList() 
     .Select(hotel => JsonConvert.DeserializeObject<HotelCount>(hotel.ToString())).ToList(); 

    // Now get ActivePropertyCount for each hotel 
    int totalCount = 0; 
    foreach (JToken jToken in hotels) 
    { 
     totalCount += jToken.Value<int>("ActivePropertyCount"); 
    } 
    return totalCount.ToString(); 
} 
+0

嗨Belogix ActivePropertyCount實際上是一些酒店,而不是一個計數。 > json返回@activePropertyCount「:」167「所以@activePropertyCount」作爲字符串返回 – CareerChange

+0

嗨Belogix,仍然收到錯誤:無法強制轉換或從System.String轉換爲Web.Domain.Ean.HotelCount。這行代碼是拋出錯誤:HotelCount countHotels = JsonConvert.DeserializeObject (hotel.ToString()); – CareerChange

+0

這條線顯示正確的數字foreach(hotelcount中的JToken酒店) – CareerChange