2011-01-12 3 views
10

제어 할 수는 없지만 출력을 C#, 바람직하게는 JSON.Net을 사용하여 소비해야하는 API가 있습니다. 내가 계획했던키워드와 충돌하는 속성이 포함 된 JSON 응답의 비 직렬화

[ 
    { 
     "media_id": 36867, 
     "explicit": 0 
    } 
] 

클래스과 같이 가지고 :

class Media { 
    public int media_id; 
    public int explicit; 
} 

직렬화 복원 :

var l = JsonConvert.DeserializeObject<List<Media>>(s); 

불행하게도, "명시 적"입니다 여기

는 예를 들어 응답입니다 C# 키워드이므로 컴파일 할 수 없습니다.

class Media { 
    public int media_id; 
    public int explicit_; 
} 

... 어떻게 든 응답이 C#을 속성에 속성 매핑 :

나의 다음 추측은 클래스를 수정하는 것입니다.

어떻게해야합니까, 아니면 완전히 잘못된 방향으로 가고 있습니까?

실패한 경우 응답을 "명백하게"무시할 수 있습니다. 그렇게 할 방법이 있다면?

답변

17

는 JSON.Net 사용하지만, 문서 here에 의해 판단, 나는 당신이 당신이 XmlSerialization 함께 할 것입니다 무엇을 할 필요가 파악하지 않았 : 속성을 추가 JSON 속성을 호출하는 방법을 알려 :

class Media { 
    [JsonProperty("media_id")] 
    public int MediaId; 
    [JsonProperty("explicit")] 
    public int Explicit; 
} 
+0

건방진, 내가 탈 직렬화를 원했을 때 ToC가 "직렬화"라고했기 때문에 건배를 건너 뛰었습니다. 포인터 주셔서 감사. –

10

C#을

class Media { 
    public int media_id; 
    public int @explicit; 
} 

하지 않음이 JSON.Net 함께 재생 방법을 잘하지만 나는 것, 당신은 예를 들어,에 @로를 이스케이프 (정확히 같은 상호 운용성 경우에) 예약어 이름을 가진 구성원을 정의 할 수 있습니다 @가 이스케이프이고 실제로 필드 이름의 일부가 아니기 때문에 제대로 작동해야한다고 상상해보십시오.

+0

나는 당신이 무슨 말을하는지 이해하지만 당신은 자세한 설명에 대한 링크를 제공 할 수 있습니까? 나는이 변경 w/시도했다 : "var x = new Media(); x.explicit = true;" 컴파일하지는 않지만 "x. @ explicit = true"가됩니다. –

+0

코드에서 "@explicit"를 사용합니다. 그러나 이것은 바이너리에서 "명시 적"이라는 실제 이름으로 컴파일됩니다. 따라서 JSON.Net 직렬화/직렬화 코드는 "@explicit"가 아닌 "explicit"을 보게됩니다. 코드에서 "\ n"을 사용할 때와 같지만 바이너리에서 줄 바꿈으로 컴파일됩니다. –

+0

고마워요. JsonProperty 응답은이 도메인에만 해당되며 더 일반적인 경우도 처리하므로 여전히 대답을 수락합니다. –

1

다음 코드는 저에게 효과적입니다.

class JsonRpc { 
    public string id; 
    public string method; 
    public string[] @params; 
} 
JsonConvert.DeserializeObject<JsonRpc> (data) 

모두에게 감사

관련 문제