Đối với những người có thể quan tâm đến mẫu trình bao bọc mà tôi hiện đang sử dụng để triển khai thực hiện tuần tự hóa tùy chỉnh với OrmLite (cũng làm việc với các ORM khác), đây là một ví dụ làm việc đơn giản với NodaTime
loại mà nếu không đã không đăng đúng:
public class BusinessObject {
public class Poco {
public readonly BusinessObject BusinessObject;
public Poco(BusinessObject businessObject) {
this.BusinessObject = businessObject;
}
public Poco() {
this.BusinessObject = new BusinessObject();
}
public string Id {
get { return this.BusinessObject.Id; }
set { this.BusinessObject.Id = value; }
}
public decimal Amount {
get { return this.BusinessObject.Amount; }
set { this.BusinessObject.Amount = value; }
}
public DateTime Dt {
get { return this.BusinessObject.Dt.ToDateTime(); }
set { this.BusinessObject.Dt = LocalDateTime.FromDateTime(value).Date; }
}
public string TimeZone {
get { return this.BusinessObject.TimeZone.Id; }
set { this.BusinessObject.TimeZone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(value); }
}
public string Description {
get { return this.BusinessObject.Description; }
set { this.BusinessObject.Description = value; }
}
}
public string Id { get; private set; }
public decimal Amount { get; private set; }
public LocalDate Dt { get; private set; }
public DateTimeZone TimeZone { get; private set; }
public string Description { get; private set; }
public BusinessObject() { }
public BusinessObject(string id, decimal amount, LocalDate dt, DateTimeZone timeZone, string description) {
this.Id = id;
this.Amount = amount;
this.Dt = dt;
this.TimeZone = timeZone;
this.Description = description;
}
}
Tôi hy vọng nó sẽ sớm có thể để xác định móc/callbacks với nhiều loại cụ thể mà cần được xử lý với mã tùy chỉnh, và cũng là OrmLite sẽ cho phép tính với setters tin được tải lại từ sự kiên trì (hiện tại nó sẽ chỉ hoạt động theo một hướng).
Cập nhật (2014/03/08): Là một workaround tạm thời, nó có thể có OrmLite sử dụng tùy chỉnh serialization/deserialization bằng cách gọi đầu tiên:
JsConfig<BusinessObject>.TreatValueAsRefType = true;
Thậm chí nếu BusinessObject
là một loại tài liệu tham khảo. Sau đó, bạn có thể thưởng thức vẻ đẹp/đơn giản/mặt khắp nơi của:
JsConfig<BusinessObject>.RawSerializeFn = bo => bo.Serialize();
JsConfig<BusinessObject>.RawDeserializeFn = str => BusinessObject.Deserialize(str);
Hy vọng hỗ trợ cho lập bản đồ tùy chỉnh sẽ được bổ sung sớm (do đó ví dụ như một NodaTime.LocalDate có thể được ánh xạ tới một DateTime thay vì một chuỗi).
Nguồn
2013-11-02 13:30:45
Xin vui lòng, đưa ra một ví dụ làm việc tối thiểu của một lớp học, bạn muốn làm thế nào để nó và làm thế nào để deserelize nó. – htellez
Nó rất đơn giản, tôi có một lớp cơ bản với một thuộc tính có kiểu phức tạp. Tôi cần tài sản này để được tuần tự hóa/deserialized vào/từ một chuỗi bằng cách sử dụng thói quen của riêng tôi chứ không phải là JSV. Tôi không nghĩ rằng một mẫu mã thực sự cần thiết trong trường hợp cụ thể này. –