MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sử dụng toàn cầu JsonConverter trên một lớp không có thuộc tính

Có, bạn có thể sử dụng IContractResolver tùy chỉnh để áp dụng một JsonConverter theo chương trình cho một lớp hoặc tài sản. Cách đơn giản nhất để làm điều này là lấy trình phân giải của bạn từ DefaultContractResolver lớp và sau đó ghi đè phương thức thích hợp. Dưới đây là ví dụ về trình phân giải hướng dẫn Json.Net sử dụng ObjectIdConverter trên tất cả các phiên bản của ObjectId nhập, bất kể chúng có thể xuất hiện trong lớp nào.

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

Để sử dụng trình phân giải, bạn có thể tạo JsonSerializer ví dụ và đặt ContractResolver thuộc tính trên đó, sau đó sử dụng phiên bản đó để thực hiện tuần tự hóa / giải mã hóa của bạn. Nếu bạn đang sử dụng JObject.ToObject()JObject.FromObject() , lưu ý rằng cả hai phương pháp đều có quá tải chấp nhận JsonSerializer ví dụ.

JsonSerializer serializer = new JsonSerializer();
serializer.ContractResolver = new CustomResolver();

JObject jo = JObject.FromObject(foo, serializer);

Ngoài ra, nếu bạn đang sử dụng JsonConvert lớp để thực hiện tuần tự hóa / deserialization của bạn, bạn có thể tạo một phiên bản của JsonSerializerSettings , đặt ContractResolver trên đó, sau đó chuyển cài đặt vào SerializeObject()DeserializeObject() phương pháp.

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new CustomResolver();

Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);

Hy vọng điều này sẽ hữu ích.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ sin

  2. Tìm xem ai đó có sinh nhật trong 30 ngày tới với mongo hay không

  3. Cách dừng chèn các tài liệu trùng lặp trong bộ sưu tập mongodb

  4. Làm cách nào để cập nhật _id của một Tài liệu MongoDB?

  5. Tại sao MongoDB lại nhanh như vậy