소개: 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
즉, 위 코드에서 볼 수 있듯이 역직렬화된 개체 개체는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!