:
//ServiceStack's JSON and JSV Format
SqliteDialect.Provider.StringSerializer = new JsvStringSerializer();
PostgreSqlDialect.Provider.StringSerializer = new JsonStringSerializer();
//.NET's XML and JSON DataContract serializers
SqlServerDialect.Provider.StringSerializer = new DataContractSerializer();
MySqlDialect.Provider.StringSerializer = new JsonDataContractSerializer();
//.NET XmlSerializer
OracleDialect.Provider.StringSerializer = new XmlSerializableSerializer();
您也可以通過實施 IStringSerializer提供自定義的序列化策略對於那些可能對我目前用OrmLite實現自定義序列化的封裝模式感興趣的人(與其他ORM一起工作),下面是一個簡單的工作示例與那些否則無法正常連載NodaTime
類型:
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;
}
}
我希望它會很快就可以定義應與自定義代碼來處理特定類型的鉤/回調,同時又有OrmLite將允許私人setter方法的屬性要從持久性中重新加載(目前它只能在一個方向上工作)。
更新(2014年3月8日):作爲臨時解決辦法,有可能通過調用第一有OrmLite使用自定義序列化/反序列:
JsConfig<BusinessObject>.TreatValueAsRefType = true;
即使BusinessObject
是引用類型。然後,你可以享受的美容/簡單/無所不在:
JsConfig<BusinessObject>.RawSerializeFn = bo => bo.Serialize();
JsConfig<BusinessObject>.RawDeserializeFn = str => BusinessObject.Deserialize(str);
自定義映射希望支持我們會盡快添加(以便例如NodaTime.LocalDate可以映射爲DateTime,而不是字符串)。
請給一個一個班的最低工作實例,你想如何實現它,以及如何去除它。 – htellez
這很簡單,我有一個屬性類型複雜的基礎類。我需要使用我自己的例程而不是JSV將該屬性序列化/反序列化到/從字符串中。我不認爲在這個特定的實例中真的需要代碼示例。 –