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

xử lý các thay đổi không gian tên trong quá trình giải mã chuỗi JSON

Định dạng của "$type" được mã hóa cứng chính thức để bao gồm không gian tên CLR của hệ thống gửi. Vì vậy, bạn có thể:

  1. Đổi tên không gian tên CLR của bạn để phù hợp với không gian tên của hệ thống gửi hoặc

  2. Phân lớp DefaultSerializationBinder và sử dụng nó để đổi tên không gian tên CLR trong quá trình giải mã bằng cách đặt nó trong JsonSerializerSettings.Binder .

Sau đây là phần đầu tiên khi thực hiện việc này:

public class NamespaceMappingSerializationBinder : DefaultSerializationBinder
{
    public string FromNamespace { get; set; }

    public string ToNamespace { get; set; }

    public override Type BindToType(string assemblyName, string typeName)
    {
        string fixedTypeName;
        if (FromNamespace != null && ToNamespace != null)
        {
            fixedTypeName = typeName.Replace(FromNamespace, ToNamespace);
        }
        else
        {
            fixedTypeName = typeName;
        }
        var type = base.BindToType(assemblyName, fixedTypeName);
        return type;
    }
}

Sau đó, khi bạn giải mã JSON của mình, hãy đặt Binder trong JsonSerializerSettings như vậy:

JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, Binder = new NamespaceMappingSerializationBinder { FromNamespace = "From Namespace", ToNamespace = "Your Namespace" } };

Phân tích cú pháp tên kiểu ở trên là cực kỳ thô thiển. Tôi đã tìm thấy một trình phân tích cú pháp thông minh hơn nhiều ở đây:Làm thế nào để phân tích cú pháp tên loại chung C # ?. Bạn cũng có thể cần mở rộng Binder tùy chỉnh để có một từ điển về ánh xạ.

Tương tự, nếu bạn cần ánh xạ lại các tên không gian tên khi tuần tự hóa và đang hoạt động trong .Net 4.0 trở lên, bạn có thể ghi đè BindToName .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách thiết lập vùng chứa Docker redis với ssl

  2. cách di chuyển dữ liệu từ mysql sang redis

  3. Độ trễ lớn khi sử dụng Celery + Redis

  4. Đẩy đến hàng đợi Laravel từ bên ngoài Laravel (NodeJS)

  5. Resque, Resque Server, trên RedisToGo với Heroku