>  기사  >  백엔드 개발  >  속성 값 역직렬화 실패 문제를 해결하는 방법은 무엇입니까?

속성 값 역직렬화 실패 문제를 해결하는 방법은 무엇입니까?

零下一度
零下一度원래의
2017-06-23 16:22:114294검색

소개: webapi 인터페이스를 개발할 때 다음과 같은 문제를 만났습니다. 복잡한 Json 문자열이 객체로 역직렬화될 때 속성 객체 중 하나를 직렬화할 수 없습니까?

사용법:

InternalRecommendRequestFormModel formData = Newtonsoft.Json.JsonConvert.DeserializeObject<InternalRecommendRequestFormModel>(dataInput);

그중: InternalRecommendRequestFormModel은 복잡한 개체이며 해당 속성에는 다른 개체와 속성이 포함되어 있습니다. dataInput은 인터페이스에 의해 전달된 JSON 문자열이며, 이는 다른 인터페이스에서 반환된 InternalRecommendRequestFormModel 객체입니다. 물론 전송 프로세스 중에 데이터의 일부 속성이 변경되어야 하지만 사용 시에는 역직렬화됩니다. 오류가 보고되고 속성 중 하나를 직렬화할 수 없습니다.

그러면 객체로의 이런 복잡한 역직렬화가 발생하면 어떻게 해야 할까요?

먼저: 분석에 따르면 오류는 개별 속성의 직렬화 실패로 인해 발생하므로 이러한 속성을 지우거나 속성의 직렬화된 내용을 제거할 수 있다면 괜찮을 것입니다.

그래서: 직렬화된 JSON 문자열에서 일부 속성을 제거하는 방법은 무엇입니까?

우리가 가장 먼저 생각하는 것은 문자열 교체, 클리어, 가로채기 등인데 실수하기 쉽습니다. 이 문자열을 작동 가능한 개체(물론 InternalRecommendRequestFormModel은 아님)로 변환한 다음 개체를 삭제하거나 지운 다음 원하는 개체로 변환할 수 있습니까? 사실 제가 처음 객체에 대해 생각할 땐 어떤 객체든 객체가 아니던가요?

시도 시작:

object formData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(dataInput);

다음과 같이 개체를 가져옵니다.

디버깅 중에 발견됨:

((Newtonsoft.Json.Linq.JObject)(JsonConvert.DeserializeObject(dataInput))). ChildrenTokens [46] , 속성 값을 얻을 수 있습니다.

즉, 위 코드에서 볼 수 있듯이 역직렬화된 개체 개체는 Newtonsoft.Json.Linq.JObject 개체로 변환됩니다. 이 개체는 Microsoft에서 제공하는 JSON 개체의 기본 클래스입니다. , 객체인 경우 json으로 직렬화하면 다시 역직렬화하는 데 도움이 될 수 있습니다.

코드는 다음과 같이 개선되었습니다.

InternalRecommendRequestFormModel formData = new InternalRecommendRequestFormModel();Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);
obj.Remove("opinions");
formData = obj.ToObject<InternalRecommendRequestFormModel>();

요약:

JSON 문자열이 객체인 한 JSON 문자열을 직접 역직렬화하고 문자열이 요구 사항을 충족하지 않으면 먼저 객체를 JObject로 변환한 다음 객체 속성을 수정한 다음 JObject에서 제공하는 ToObject()를 사용하여 변환해야 하는 객체로 변환할 수 있습니다

<strong><span style="font-size: 15px">Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);</span></strong><br>

위 내용은 속성 값 역직렬화 실패 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.