2013-04-06 272 views
1

即時得到這個錯誤,而試圖反序列化JSON字符串對象:JSON反序列化錯誤

"System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> Newtonsoft.Json.JsonSerializationException: Error converting value "{"Admin":false,"Id":1,"Password":"heslo","Nick":"jozifek"}" to type 'Entities.dbo.User'. Path 'Frontman', line 1, position 105. ---> System.ArgumentException: Could not cast or convert from System.String to Entities.dbo.User. 
    at Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(Object value, Type initialType, Type targetType) 
    at Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(Object initialValue, CultureInfo culture, Type targetType) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType) 
    --- End of inner exception stack trace --- 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 
    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) 
    at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) 
    at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type) 
    at BussinessLogic.helpers.Serializer.Deserialize[T](String obj) in C:\Users\Ondra\documents\visual studio 2010\Projects\webServiceTestApp\BussinessLogic\helpers\Serializer.cs:line 14 
    at webServiceTestApp.Service1.GetSongs(String band) in C:\Users\Ondra\documents\visual studio 2010\Projects\webServiceTestApp\webServiceTestApp\Service1.asmx.cs:line 142 
    --- End of inner exception stack trace ---" 

User.cs看起來是這樣的:

namespace Entities.dbo 
{ 
    [TableName("tbl_user")] 
    public class User : AbstractEntity 
    { 
     [MapField("nick")] 
     public string Nick { get; set; } 

     [MapField("password")] 
     public string Password { get; set; } 

     [MapField("admin")] 
     public bool Admin { get; set; } 
    } 
} 

和Band.cs看起來是這樣的:

namespace Entities.dbo 
{ 
    [TableName("tbl_band")] 
    public class Band : AbstractEntity 
    { 
     [MapField("name")] 
     public string Name { get; set; } 

     [MapField("frontman")] 
     public int FrontmanId { get; set; } 

     [Association(CanBeNull = false, ThisKey = "FrontmanId", OtherKey = "Id")] 
     public User Frontman { get; set; } 

AbstractEntity:

namespace Entities.helpers 
{ 
    public abstract class AbstractEntity 
    { 
     [PrimaryKey, Identity, MapField("id")] 
     public int Id { get; set; } 

     public string Serialize() 
     { 
      return JsonConvert.SerializeObject(this); 
     } 
    } 
} 

這個錯誤彈出時,即時通訊發送字符串進行反序列化作爲包含在物業主唱用戶對象的樂隊..

哪裏出了錯什麼想法?

謝謝:)

+0

用戶類型中是否沒有Id屬性,或者您忘記了它? – 2013-04-06 12:58:29

+0

哦,對不起,我忘了說,這是abstractentity類的樣子:命名空間Entities.helpers { 公共抽象類AbstractEntity { [PrimaryKey的,身份,MapField可( 「ID」)] 公衆詮釋標識{得到;組; } public string Serialize() { return JsonConvert.SerializeObject(this); } } } – 2013-04-06 13:00:38

回答

1

很難說,我有使用瓊森曾在幾年前,但

  1. 在瓊森你有物業「密碼」,但對象必須MapField可(「密碼「) - 小寫

  2. 是AbstractEntity類的」Id「屬性嗎?

+0

1.它的BLtoolkit映射,小寫是正確的。它在數據庫中的列的名稱。是的 – 2013-04-06 13:07:00