我有一些類爲解析網絡響應:System.OverflowException序列化
[DataContract]
public abstract class GYResponse
{
[DataMember(Name = "code")]
public int Code { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
}
[DataContract]
public class ResponseGetUser : GYResponse
{
[DataMember(Name = "result")]
public GYUser Result { get; set; }
}
[DataContract]
public class ResponseGetVenue : GYResponse
{
[DataMember(Name = "result")]
public GYVenue Result { get; set; }
}
我用DataContractJsonSerializer
:
GYResponse response_obj = request.Creater.CreateResponseObj();
//CreateResponseObj() return ResponseGetUser, ResponseGetVenue etc
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(gyResponse)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(response_obj.GetType());
response_obj = (GYResponse)serializer.ReadObject(stream);
}
我"System.OverflowException"
在行:
response_obj = (GYResponse)serializer.ReadObject(stream);
/checked編譯器選項關閉。而ReadObject
不能拋出這個異常。
但是,如果我重寫的類,然後它的工作原理:
[DataContract]
public abstract class GYResponse
{
}
[DataContract]
public class ResponseGetUser : GYResponse
{
[DataMember(Name = "result")]
public GYUser Result { get; set; }
[DataMember(Name = "code")]
public int Code { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
}
[DataContract]
public class ResponseGetVenue : GYResponse
{
[DataMember(Name = "result")]
public GYVenue Result { get; set; }
[DataMember(Name = "code")]
public int Code { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
}
我明白,這是一個模糊的問題,但無法理解可能是什麼問題。什麼時候可以拋出這個異常?
更新異常信息:
消息:
There was an error deserializing the object of type GotYou.RequesterService.ResponseGetInfo. Value was either too large or too small for an Int32.
的InnerException:
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToPrimitiveDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ReadClassDataContractMembers(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, Object newInstance, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ReadClassDataContractMembers(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, Object newInstance, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertDictionaryToClassDataContract(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ReadClassDataContractMembers(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, Object newInstance, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertDictionaryToClassDataContract(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ReadClassDataContractMembers(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, Object newInstance, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertDictionaryToClassDataContract(DataContractJsonSerializer serializer, ClassDataContract dataContract, Dictionary`2 deserialzedValue, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream)
StrackTrace:
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream)
at GotYou.RequesterService.PostRequester.getResponseCallback(IAsyncResult asynchronousResult)
JSON響應:
{
"code": 0,
"message": "",
"result": {
"uid": "51da997decaa3ca351000000",
"url": "",
"nickname": "Smileman",
"avatar": "\/img\/profile_pics\/users\/51da997decaa3ca351000000\/cache\/avatar48x48.jpg?lastUpdate=1381215566",
"age": {
"number": "22",
"suffix": "года",
"birthday": "1991-04-17"
},
"sex": 1,
"aboutself": "",
"premium": true,
"isFriend": 3,
"online": {
"lastVisit": "7 минут назад",
"status": true
},
"features": {
"car": false,
"house": false,
"cash": false,
"group": true
},
"location": {
"longitude": 36.570838832,
"latitude": 50.571069472,
"timestamp": 1381319677
},
"bonuses": 8515,
"address": "",
"city": {
"code": "3100000100000",
"title": ""
},
"cover": "\/img\/profile_pics\/users\/51da997decaa3ca351000000\/cache\/hero480x290.jpg?lastUpdate=1381215566",
"distance": 63.671441859659,
"paidServices": {
"vip": true,
"theming": true,
"invisible": false,
"incognito": false,
"closed": true
},
"regdate": "19.08.2013",
"purpose": {
"id": "500fa718ecaa3c6e3b000002",
"title": ""
}
}
}
請張貼*全*異常堆棧跟蹤。這很可能會讓事情變得更加清晰。如果您要顯示相關數據,這也會有所幫助。 –
那麼你是否要序列化一個大對象? – sino
@sino但爲什麼它改變後工作抽象類 – Alexandr