【发布时间】:2014-10-13 21:36:08
【问题描述】:
我们正在考虑使用连接到 MSSQL 2008R2 的 ServiceStack.OrmLite.SqlServer 4.0.31 来替换我们当前的 ORM,并且难以设置复杂类型的字符串序列化。在我们的旧 ORM 中,这些是使用自动映射器手动映射到使用 JSON.NET 的字符串字段,因此我们已经在数据库中的列中拥有我们的 JSON VARCHAR(MAX)。
我已将字符串序列化程序设置为:
SqlServerDialect.Provider.StringSerializer = new JsonDataContractSerializer();
数据库类型为:
public class Group
{
[Alias("GroupID")]
[AutoIncrement]
[PrimaryKey]
public int GroupId { get; set; }
[Alias("Name")]
public string Name { get; set; }
[Alias("ShortName")]
public string ShortName { get; set; }
[Alias("GroupTypeID")]
public int GroupTypeId { get; set; }
[Alias("ContactDetails")]
public ContactDetails ContactDetails { get; set; }
}
联系方式是:
[DataContract]
[Serializable]
public class ContactDetails
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string CompanyName { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Address { get; set; }
}
对象已创建,但没有任何字段被序列化:
数据库中的数据如下:
{
"Address" : "2 Doe Street, Dublin 2",
"Phone" : "01 4684455",
"PhoneIsVerified" : false,
"MobileIsVerified" : false,
"Fax" : "01 4684455",
"Email" : "john@doe.ie",
"Website" : "http://www.doe.ie",
"PropertySectionEmail" : {},
"IsPrivate" : false
}
数据库中的数据如下:
我在 github 中看到用于存储这些字段的默认字段是 VARBINARY(MAX),所以我不确定这是否是它不起作用的原因,但我检查了数据注释中的所有属性,但没有一个我可以看到指定它是复杂类型。任何想法为什么这不起作用?
【问题讨论】:
-
任何 POCO 都自动成为复杂类型。目前尚不清楚究竟是什么不起作用,数据库中的 JSON 是什么样的,您使用的是什么 OrmLite API 以及实际结果是什么?
-
我在问题中添加了更多细节,希望能澄清问题。看起来,seralizer 创建了联系人详细信息 poco,因为它不为 null,但未填充它,但 json 可用于填充对象。
标签: c# servicestack ormlite-servicestack