복붙노트

[MONGODB] 전 세계적으로 속성없이 클래스에 JsonConverter를 사용

MONGODB

전 세계적으로 속성없이 클래스에 JsonConverter를 사용

나는 MVC .NET 프로젝트를 가지고 있고, 나는 MongoDB를 사용하고 있습니다. 나는이 대답 설명으로, 문자열로 ObjectId가 속성을 직렬화하는 사용자 정의 JsonConverter을 사용합니다 : 자동 retun MongoDB를 ObjectId가 MVC에서 Json.NET와 문자열로

사용자 지정 변환은 특정 부동산에 사용되도록 거기에서 나는 속성을 사용 : [JsonConverter (대해서 typeof (객체 ID 변환기))

유형 ObjectId가의 모든 속성에 ObjectIdConverter를 사용하는 시리얼 라이저를 알 수있는 방법이 있습니까? 나는 전체 프로젝트에 가서이 속성을 추가 할 wan't하지 않습니다.

감사!

해결법

  1. ==============================

    1.예, 프로그래밍 클래스 나 속성에 JsonConverter을 적용 할 사용자 정의 IContractResolver를 사용할 수 있습니다. 이 작업을 수행하는 가장 간단한 방법은 DefaultContractResolver 클래스에서 해결을 유도 한 후 적절한 방법을 무시하는 것입니다. 아래에 상관없이에서 나타날 수있는 어떤 클래스의, ObjectId가 유형의 모든 인스턴스 상에 ObjectIdConverter를 사용하도록 지시 Json.Net 한 예 리졸버이다.

    예, 프로그래밍 클래스 나 속성에 JsonConverter을 적용 할 사용자 정의 IContractResolver를 사용할 수 있습니다. 이 작업을 수행하는 가장 간단한 방법은 DefaultContractResolver 클래스에서 해결을 유도 한 후 적절한 방법을 무시하는 것입니다. 아래에 상관없이에서 나타날 수있는 어떤 클래스의, ObjectId가 유형의 모든 인스턴스 상에 ObjectIdConverter를 사용하도록 지시 Json.Net 한 예 리졸버이다.

    class CustomResolver : DefaultContractResolver
    {
        protected override JsonObjectContract CreateObjectContract(Type objectType)
        {
            JsonObjectContract contract = base.CreateObjectContract(objectType);
            if (objectType == typeof(ObjectId))
            {
                contract.Converter = new ObjectIdConverter();
            }
            return contract;
        }
    }
    

    리졸버를 사용하려면 JsonSerializer 인스턴스를 구성하고 그 위에 ContractResolver 속성을 설정 한 다음 직렬화 / 역 직렬화를 수행하기 위해 해당 인스턴스를 사용할 수 있습니다. 당신이 JObject.ToObject ()와 JObject.FromObject (), 메모를 사용하는 경우 두 가지 방법은 JsonSerializer 인스턴스를 허용 과부하가있다.

    JsonSerializer serializer = new JsonSerializer();
    serializer.ContractResolver = new CustomResolver();
    
    JObject jo = JObject.FromObject(foo, serializer);
    

    당신이 당신의 직렬화 / 역 직렬화를 수행 할 JsonConvert 클래스를 사용하는 경우 또는, 당신은 JsonSerializerSettings의 인스턴스를 만들 수 있습니다, 그에 ContractResolver 속성을 설정 한 후 SerializeObject ()와 DeserializeObject () 메소드에 설정을 전달합니다.

    JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.ContractResolver = new CustomResolver();
    
    Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);
    

    도움이 되었기를 바랍니다.

  2. from https://stackoverflow.com/questions/27332258/globally-use-a-jsonconverter-on-a-class-without-the-attribute by cc-by-sa and MIT license