【发布时间】:2016-06-14 10:31:37
【问题描述】:
我在这里遇到一个与 ServiceStack.Text 的序列化程序有关的非常奇怪的问题。
假设我有两个类,一个叫Person,另一个叫Address。
人:
public class Person
{
public string Name { get; set; }
public Dictionary<string,object> ExtraParams { get; set; }
}
地址:
public class Address
{
public string StreetName { get; set; }
}
在我这样做的一种方法中
var john = new Person
{
Name: "John",
ExtraParameters: new Dictionary<string, object>
{
{ "AddressList", new List<Address>{
new Address{ StreetName : "Avenue 1" }
}
}
}
};
我也在使用 ServiceStack 的 ORMLite。现在,当我尝试从数据库中检索数据并将其转换回字典时,问题就来了:
//save to database
var id = db.Save(john)
//retrieve it back
var retrieved = db.SingleById<Person>(id);
//try to access the Address List
var name = retrieved.Name; //this gives "John"
var address = retrieved.ExtraParameters["AddressList"] as List<Address>; //gives null always , due to typecasting failed.
当我尝试调试时,ExtraParameters 是 Dictionary,key 名为“AddressList”,但 value 实际上是一个字符串 - "[{StreetName:"Avenue 1"}]"
任何想法我做错了什么?关于对象和字典的类型转换,我一直在上上下下查看,但似乎没有一个和我有同样的问题。
我设置了以下配置:
JsConfig.ExcludeTypeInfo = true;
JsConfig.ConvertObjectTypesIntoStringDictionary = true;
【问题讨论】:
-
尝试使用
Type Serializer将AddressList反序列化为List<Address>。
标签: c# servicestack servicestack-text