JsonProperty 속성을 유연하게 제어하여 ASP.NET MVC 사용자 정의 JSON 직렬화 구현
Json.Net을 사용하는 ASP.NET MVC 애플리케이션에서 개발자는 JSON 직렬화 중에 데이터 양을 줄이기 위해 [JsonProperty(PropertyName = "shortName")]
특성을 사용하는 경우가 많습니다. 이 접근 방식은 .NET 클라이언트에 적합하지만 브라우저 기반 클라이언트에서는 약식 속성 이름을 사용하는 데 문제가 있습니다.
이 문제를 해결하려면 사용자 정의 계약 파서를 사용하여 직렬화 중에 [JsonProperty()]
속성을 동적으로 무시할 수 있습니다. 방법은 다음과 같습니다.
사용자 정의 계약 파서
<code class="language-csharp">class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var list = base.CreateProperties(type, memberSerialization); foreach (JsonProperty prop in list) { prop.PropertyName = prop.UnderlyingName; } return list; } }</code>
속성 억제 전환
직렬화 중에 [JsonProperty()]
속성을 선택적으로 무시하려면 JsonSerializerSettings
의 ContractResolver
속성을 조건부로 설정할 수 있습니다. 예시는 다음과 같습니다.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings { Formatting = Formatting.Indented }; if (useLongNames) { settings.ContractResolver = new LongNameContractResolver(); } string jsonString = JsonConvert.SerializeObject(obj, settings);</code>
useLongNames
플래그를 설정하면 [JsonProperty()]
속성을 무시하고 직렬화에 더 긴 속성 이름을 사용할지 여부를 제어할 수 있습니다. 이를 통해 특정 클라이언트 요구 사항에 따라 JSON 출력을 세밀하게 제어할 수 있습니다.
출력 예
다음 예를 고려해 보세요.
<code class="language-csharp">Foo foo = new Foo { CustomerNumber = "BG60938", CustomerName = "Bubba Gump Shrimp Company" }; Console.WriteLine("--- 使用JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, false)); Console.WriteLine(); Console.WriteLine("--- 忽略JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, true));</code>
출력:
<code>--- 使用JsonProperty名称 --- { "cust-num": "BG60938", "cust-name": "Bubba Gump Shrimp Company" } --- 忽略JsonProperty名称 --- { "CustomerNumber": "BG60938", "CustomerName": "Bubba Gump Shrimp Company" }</code>
[JsonProperty()]
속성을 동적으로 재정의하면 JSON 직렬화 프로세스를 사용자 정의하여 특정 클라이언트에 대한 데이터 양을 최적화하는 동시에 다른 클라이언트에 대해 일관된 개체 계층 구조를 유지할 수 있습니다.
위 내용은 ASP.NET MVC에서 사용자 정의 JSON 직렬화를 위해 JsonProperty 특성을 선택적으로 재정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!