2013-05-06 4 views
0

2 개의 복잡한 객체가 있습니다. 하나는 성공적으로 구문 분석하고 다른 하나는 예외를 던지고 있습니다. 객체 간의 유일한 차이점은 2 개의 double 유형 속성입니다. 나는 그들이 JSON에 존재하는 (첫 번째 경우에 그들은 (항목을 보유하지 않음) 비어 있어야하고, 두 번째 경우에 그들이 설정해야하므로 MyItem이 두 라인을 보유하고이상한 Json.net 예외 "입력 문자열이 올바른 형식이 아닙니다."

var item = JsonConvert.DeserializeObject<MyItem>(result.ToString()); 

로 역 직렬화하고있어 및 deserialization 개체에서).

추적 :

at Newtonsoft.Json.Utilities.ConvertUtils.IntParseFast(Char[] value, Int32 start, Int32 length) 
at Newtonsoft.Json.JsonTextReader.ParseNumber() 
at Newtonsoft.Json.JsonTextReader.ParseValue() 
at Newtonsoft.Json.JsonTextReader.ReadInternal() 
at Newtonsoft.Json.JsonReader.ReadAsInt32Internal() 
at Newtonsoft.Json.JsonTextReader.ReadAsInt32() 
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter) 
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) 

어떤 제안이?

+4

당신이 각각의 경우에 ('result.ToString()') 구문 분석하고있는 JSON을 게시하시기 바랍니다 코드의이 부분을 사용합니다. 짧지 만 완전한 * 예가 이상적입니다. –

+0

'MyItem' 클래스와 두 개의 JSON 문자열을 게시합니다. – ken2k

+0

@JonSkeet 이런 젠장, 얘들 아, 나는 햄버거를 사러 가야 해. :) diff 부분을 복사하는 동안 속성 중 하나가 int로 설정되어있는 것을 발견했다. –

답변

2

복합 객체의 프리미티브 유형에 따라 직렬화 된 객체의 형식을 확인하십시오. 또한

var item = JsonConvert.DeserializeObject<MyItem>(result.ToString(), 
new JsonSerializerSettings(){DefaultValueHandling = DefaultValueHandling.Ignore}); 
관련 문제