Json.Net에서 사용자 지정 속성 처리

mkul

내 목표는 속성이없는 속성과 특정 사용자 지정 속성이있는 속성을 직렬화하는 것입니다.

다음 클래스의 경우 :

public class Msg
{
    public long Id { get; set; }

    [CustomAttributeA]
    public string Text { get; set; }

    [CustomAttributeB]
    public string Status { get; set; }
}

메서드를 호출 할 때 Serialize(object, CustomAttributeA)다음 출력을 원합니다.

{
    "Id" : someId,
    "Text" : "some text"
}

을 (를) 전화 Serialize(object, CustomAttributeB)하면 다음 항목을 원합니다.

{
    "Id" : someId,
    "Status" : "some status"
}

커스텀을 생성하여이를 달성 할 수 있다는 것을 읽었 ContractResolver지만이 경우 두 개의 개별 계약 해결자를 생성해야합니까?

브라이언 로저스

목표를 달성하기 위해 두 개의 개별 리졸버가 필요하지 않습니다. ContractResolver유형 매개 변수가 직렬화 할 때 찾고있는 속성을 나타내는 사용자 정의 제네릭을 만드십시오 .

예를 들면 :

public class CustomResolver<T> : DefaultContractResolver where T : Attribute
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);

        foreach (JsonProperty prop in list)
        {
            PropertyInfo pi = type.GetProperty(prop.UnderlyingName);
            if (pi != null)
            {
                // if the property has any attribute other than 
                // the specific one we are seeking, don't serialize it
                if (pi.GetCustomAttributes().Any() &&
                    pi.GetCustomAttribute<T>() == null)
                {
                    prop.ShouldSerialize = obj => false;
                }
            }
        }

        return list;
    }
}

그런 다음 도우미 메서드를 만들어 확인자를 만들고 개체를 직렬화 할 수 있습니다.

public static string Serialize<T>(object obj) where T : Attribute
{
    JsonSerializerSettings settings = new JsonSerializerSettings
    {
        ContractResolver = new CustomResolver<T>(),
        Formatting = Formatting.Indented
    };
    return JsonConvert.SerializeObject(obj, settings);
}

직렬화하려면 다음과 같이 도우미를 호출하십시오.

string json = Serialize<CustomAttributeA>(msg);

데모 바이올린 : https://dotnetfiddle.net/bRHbLy

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JSON.NET 사용자 지정 유형 처리

분류에서Dev

Application Insights 및 Azure Stream Analytics 쿼리 사용자 지정 JSON 속성

분류에서Dev

하위 속성에 대한 JSON .NET 사용자 지정 이름 확인자

분류에서Dev

MVC 5의 ASP.NET Identity 3에서 사용자 지정 사용자 속성 관리

분류에서Dev

JSON을 사용한 C # asp.net mvc 사용자 지정 오류 처리

분류에서Dev

반환 된 json에 지정된 사용자 지정 요소 처리

분류에서Dev

오류를 처리하기위한 사용자 지정 속성

분류에서Dev

사용자 지정 속성에 대한 AppInsights 쿼리

분류에서Dev

Magento : 주문 그리드에 사용자 지정 속성 추가

분류에서Dev

.NET Core에서 사용자 지정 특성을 처리하는 Swashbuckle IOperationFilter를 구현하는 방법

분류에서Dev

Python LDAP 쿼리에서 사용자 지정 속성 가져 오기

분류에서Dev

Yeoman 사용자 지정 생성기가 package.json에서 종속성을로드하지 않음

분류에서Dev

오류를 처리 할 때 ember-data에서 사용자 지정 응답 json을 설정하는 방법

분류에서Dev

System.Text.Json을 사용하는 선택적 속성에 대한 사용자 지정 JSON serializer

분류에서Dev

잘못된 JSON에 대한 적절한 오류를 본문에 처리하고 반환 할 수있는 사용자 지정 Plug를 작성합니다.

분류에서Dev

Net Core 사용자 지정 사용자 속성

분류에서Dev

Lua에서 사용자 지정 속성을 사용하여 STOMP

분류에서Dev

C #의 사용자 지정 예외 처리에서 base () 생성자. 어떻게 작동합니까?

분류에서Dev

.NET Core 앱에서 사용자 지정 오류를 처리하는 방법

분류에서Dev

CMake에서 사용자 지정 파일 유형 종속성을 처리하는 이상적인 방법은 무엇입니까?

분류에서Dev

사용자 지정 속성 내에서 사용할 속성 값 가져 오기

분류에서Dev

사용자 지정 사용자 속성 액세서 고안

분류에서Dev

AWS Cognito에서 사용자 지정 속성 설정

분류에서Dev

여러 속성에서 NSArray 사용자 지정 개체 정렬

분류에서Dev

사용자 지정 로깅 처리기에 " '레벨'속성이 없습니다"라는 오류 메시지가 나타나는 이유는 무엇입니까?

분류에서Dev

Woocommerce Wordpress 관리자에서 저장 속성 버튼 사용자 정의

분류에서Dev

JSON에 사용자 지정 속성을 추가하면 중복이 생성됩니다.

분류에서Dev

require.js에서 정의되지 않은 종속성 처리

분류에서Dev

OS X에서 사용자 지정 URL 처리기를 구성하려면 어떻게합니까?

Related 관련 기사

  1. 1

    JSON.NET 사용자 지정 유형 처리

  2. 2

    Application Insights 및 Azure Stream Analytics 쿼리 사용자 지정 JSON 속성

  3. 3

    하위 속성에 대한 JSON .NET 사용자 지정 이름 확인자

  4. 4

    MVC 5의 ASP.NET Identity 3에서 사용자 지정 사용자 속성 관리

  5. 5

    JSON을 사용한 C # asp.net mvc 사용자 지정 오류 처리

  6. 6

    반환 된 json에 지정된 사용자 지정 요소 처리

  7. 7

    오류를 처리하기위한 사용자 지정 속성

  8. 8

    사용자 지정 속성에 대한 AppInsights 쿼리

  9. 9

    Magento : 주문 그리드에 사용자 지정 속성 추가

  10. 10

    .NET Core에서 사용자 지정 특성을 처리하는 Swashbuckle IOperationFilter를 구현하는 방법

  11. 11

    Python LDAP 쿼리에서 사용자 지정 속성 가져 오기

  12. 12

    Yeoman 사용자 지정 생성기가 package.json에서 종속성을로드하지 않음

  13. 13

    오류를 처리 할 때 ember-data에서 사용자 지정 응답 json을 설정하는 방법

  14. 14

    System.Text.Json을 사용하는 선택적 속성에 대한 사용자 지정 JSON serializer

  15. 15

    잘못된 JSON에 대한 적절한 오류를 본문에 처리하고 반환 할 수있는 사용자 지정 Plug를 작성합니다.

  16. 16

    Net Core 사용자 지정 사용자 속성

  17. 17

    Lua에서 사용자 지정 속성을 사용하여 STOMP

  18. 18

    C #의 사용자 지정 예외 처리에서 base () 생성자. 어떻게 작동합니까?

  19. 19

    .NET Core 앱에서 사용자 지정 오류를 처리하는 방법

  20. 20

    CMake에서 사용자 지정 파일 유형 종속성을 처리하는 이상적인 방법은 무엇입니까?

  21. 21

    사용자 지정 속성 내에서 사용할 속성 값 가져 오기

  22. 22

    사용자 지정 사용자 속성 액세서 고안

  23. 23

    AWS Cognito에서 사용자 지정 속성 설정

  24. 24

    여러 속성에서 NSArray 사용자 지정 개체 정렬

  25. 25

    사용자 지정 로깅 처리기에 " '레벨'속성이 없습니다"라는 오류 메시지가 나타나는 이유는 무엇입니까?

  26. 26

    Woocommerce Wordpress 관리자에서 저장 속성 버튼 사용자 정의

  27. 27

    JSON에 사용자 지정 속성을 추가하면 중복이 생성됩니다.

  28. 28

    require.js에서 정의되지 않은 종속성 처리

  29. 29

    OS X에서 사용자 지정 URL 처리기를 구성하려면 어떻게합니까?

뜨겁다태그

보관