2016-10-31 5 views
0

문자열 속성에 대해 빈 개체 "{}"에 응답하는 외부 서비스를 사용합니다. 예외를 피하기 위해 일부 속성을 사용할 수 있습니까?빈 개체 "{}"로 문자열 속성 비 직렬화

void should_deserialize() 
{ 
    var json = "{ \"p1\": {} }"; 
    var res = JsonConvert.DeserializeObject<T1>(json); 
} 

class T1 
{ 
    public string P1 { get; set; } 
} 
+2

무엇가 실제로 문자열이 있다면 응답 않습니다를? –

+0

@ LasseV.Karlsen 올바른 경우 : { "p1": "올바른 문자열"} 그러나 다른 경우 : { "p1": {}} – fravelgue

+3

나는 API의 제작자에게 분명히 불평 할 것입니다. 미래에 그러한 API를 만들지 못하게하는 것 이외의 다른 이유나 목표는 없습니다. '{}'는 객체이고 빈 문자열이 아니며 동일한 속성을 가진 다른 유형은 좋은 생각이 아닙니다. –

답변

6

당신은이 문제를 회피하기 위해 숨겨진 백업 필드를 사용할 수 있습니다

class T1 
{ 
    [JsonProperty("p1")] 
    private object _p1; 

    [JsonIgnore] 
    public string P1 
    { 
     get { return _p1 as string; } 
     set { _p1 = value; } 
    } 
} 

var json = "{ \"p1\": {} }"; 
// res.P1 is null 
var res = JsonConvert.DeserializeObject<T1>(json); 

var json2 = "{ \"p1\": \"hello\" }"; 
// res2.P1 is "hello" 
var res2 = JsonConvert.DeserializeObject<T1>(json2); 
+1

내가 편집 한 내용이므로 내 대답을 삭제했습니다. – Geek

관련 문제