JSON.NET을 사용하여 REST API에서 응답을 역 직렬화하려고 시도하고 있습니다.JsonConvert.DeserializeObject가 null 동적 객체를 생성합니다.
dynamic resultObject = JsonConvert.DeserializeObject(responseText);
자주 변경되므로 REST API가 반환하는 다양한 종류의 응답에 대해 클래스를 정의하지 않아도됩니다. 런타임 변수 dynamic
을 활용하고 싶습니다.
VS2015에서 위의 코드 행이 실행 된 직후의 값을 보려면 감시자를 추가했습니다.
resultObject
은 null object
으로 해결되지만 회선 코드는 직접 실행하여 Newtonsoft.Json.Linq.JObject
이되며 결과는 deserialized 응답 문자열로 채워집니다.
동적 변수 resultObject
이 (가) JObject
으로 채워지지 않는 이유는 무엇입니까?
var responseStream = e.Response?.GetResponseStream();
string responseText = "";
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
dynamic responseObject = JsonConvert.DeserializeObject(responseText);
foreach (var error in responseObject["errors"].Children())
{
errors.Add(error.Val);
}
}
업데이트 : JSON의
내용은 구문 분석 :
JSON 디버그 정보를 제거하기 위해 업데이트 - 문제가 계속.
https://jsonblob.com/57cb00c7e4b0dc55a4f2abe9
UPDATE 2 :
이 JsonConvert.DeserializeObject()
전체 물체에 별도의 브라켓을 내 JSON을 구문 분석하는 것 같습니다.
문자열이 응답 스트림으로부터 생성 될 때 : JsonConvert.DeserializeObject()의
"{\"message\":\"422 Unprocessable Entity\",\"errors\":[[\"The email must be a valid email address.\"],[\"The password must be at least 8 characters.\"]],\"status_code\":422}"
값 :
{{ "message": "422 Unprocessable Entity", "errors": [ [ "The email must be a valid email address." ], [ "The password must be at least 8 characters." ] ], "status_code": 422 }}
UPDATE 3 JObject.Parse
로 변환 가 초래 동일한 출력에서.
변수를 dynamic
에서 JObject
으로 변경하여 JObject.Parse()
의 응답을 수락하고 여전히 변수가 null로 설정되었습니다.
응답 텍스트는 무엇입니까? 간단한 json 객체를 사용하면 동적 객체의 속성을 정상적으로 얻을 수 있습니다. – Evk
@Evk 질문에 내용을 추가했습니다. 요청에 꽤 많은 불필요한 디버그 정보가 있습니다. 나는 그것을 제거하고 그것이 작동하는지 확인합니다. –
@dbc 스크린 샷을 제거하고 최소한의 완전한 코드 샘플을 제공하도록 업데이트되었습니다. –