>백엔드 개발 >C++ >Json.net을 사용하여 다시 직렬화하지 않고 JSON에서 속성을 역직렬화하는 방법은 무엇입니까?

Json.net을 사용하여 다시 직렬화하지 않고 JSON에서 속성을 역직렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-10 20:13:42468검색

How to Deserialize a Property in JSON Without Serializing It Back Using Json.net?

Json.net을 사용하여 속성을 다시 직렬화하지 않고 역직렬화

Json.net을 사용하면 C# 개체 속성의 직렬화 및 역직렬화 프로세스를 제어할 수 있습니다. 이 문서에서는 JSON 파일에서 특정 속성을 역직렬화하지만 JSON 파일로 다시 직렬화하지 않으려는 시나리오를 살펴봅니다. 이를 달성하는 몇 가지 방법은 다음과 같습니다.

방법 1: ShouldSerialize 메서드 사용

Json.net은 ShouldSerialize 메서드를 사용하여 조건부 직렬화를 지원합니다. 직렬화 중에 무시하려는 속성의 경우 클래스에 Boolean ShouldSerializeBlah() 메서드를 추가합니다. 여기서 Blah는 속성 이름입니다. 이 메서드는 항상 false를 반환해야 합니다.

예:

<code class="language-csharp">class Config
{
    public Fizz ObsoleteSetting { get; set; }

    public Bang ReplacementSetting { get; set; }

    public bool ShouldSerializeObsoleteSetting()
    {
        return false;
    }
}</code>

방법 2: JObject를 사용하여 JSON 작업

JsonConvert.SerializeObject에 의존하는 대신 구성 객체를 JObject로 역직렬화할 수 있습니다. JSON에 쓰기 전에 JSON에서 원치 않는 속성을 제거하세요.

<code class="language-csharp">JObject jo = JObject.FromObject(config);

// 从其父级中删除“ObsoleteSetting” JProperty
jo["ObsoleteSetting"].Parent.Remove();

json = jo.ToString();</code>

방법 3: 속성 사용

또 다른 방법은 속성을 사용하는 것입니다.

  1. 직렬화가 필요하지 않은 속성에 [JsonIgnore] 속성을 추가합니다.
  2. 원래 속성과 동일한 유형으로 대체 사유 속성 설정자를 만듭니다. setter 구현에서는 원래 속성을 설정해야 합니다.
  3. 원래 속성과 동일한 JSON 이름을 사용하여 재정의 설정자에 [JsonProperty] 속성을 적용합니다.

예는 다음과 같습니다.

<code class="language-csharp">class Config
{
    [JsonIgnore]
    public Fizz ObsoleteSetting { get; set; }

    [JsonProperty("ObsoleteSetting")]
    private Fizz ObsoleteSettingAlternateSetter
    {
        // get intentionally omitted here
        set { ObsoleteSetting = value; }
    }

    public Bang ReplacementSetting { get; set; }
}</code>

위 내용은 Json.net을 사용하여 다시 직렬화하지 않고 JSON에서 속성을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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