Newtonsoft.Json과 웹 API 통합을하고 있습니다. 언제나 그렇듯이 다시 보내고있는 내용을 제대로 deserialize하기 위해서는 바보 스턴트를해야합니다. 이 경우 대상 객체의 속성과 일치하지 않는 첫 번째 속성을 특정 속성으로 일치 시키십시오.
는 API 구조의이 종류 닮은 응답 보내드립니다 :{ "contacts": [ ... ], "has-more": true, "offset": 38817 }
을 특성이 다른 방법 응답에 거의 일정하고 있었다 "오프셋" "-가 더"를 그에 따라 deserialize하는 응답 객체에 정의됩니다. 응답 개체는 다음과 같이 보입니다.
public class APIResponse {
public JContainer Result { get; set; }
[JsonProperty("has-more")]
public bool HasMore { get; set; }
[JsonProperty("offset")]
public int Offset { get; set; }
}
첫 번째 "연락처"속성은 다를 수 있습니다. 일부 방법의 경우 "연락처"를 얻을 수 있고, 일부는 "회사"가 될 수도 있고 다른 사람들은 누가 아는가를 얻을 수도 있습니다. 나는 또한 모든 응답이 그러한 "가변적 인"속성을 가질 것이라는 확신을 줄 수있는 방법이 없으며, 위치 적으로 말하면서 그것이 최초 일 것입니다.
이 예에서 디시리얼라이저는 Json을보고 "연락처, '연락처'에 매핑되는 것이 아무것도 없으므로 '결과'에 넣을 것입니다. , 그리고 나서 JsonProperty 속성에서 'has-more'와 'offset'이 HasMore와 Offset으로 들어간다는 것을 알 수 있습니다. 좋아, 모든 것이 여기에 있습니다. "
여기에는 사용자 정의 JsonConverter
또는 IContractResolver
의 트릭이 포함되어 있지만 여기에는 점을 연결하지 않은 것 같습니다. 간단한 사용자 정의 계약 해결자를 시도했지만 JSON 텍스트에서 찾을 객체 속성 이름을 속성 이름으로 확인하는 데 계약 확인자를 사용하는 것으로 나타났습니다. 그 반대의 경우도 마찬가지입니다.
당신은 사용할 수 있어야합니다 ['[JsonExtensionData]'] (http://www.newtonsoft.com/json/help/html/DeserializeExtensionData.htm). – dbc
@dbc 그 일을 끝내는 것처럼 보입니다. 나는 오늘 오후에 그것을 시험해 볼 것이다. – db2