ここでは、ServiceStack.Textのシリアライザに関する非常に奇妙な問題があります。ServiceStackオブジェクトを使用して辞書のシリアライズとデシリアライズ
私は2つのクラス、1つはPerson
と呼ばれ、もう1つはAddress
と呼ばれているとします。
パーソン:
public class Person
{
public string Name { get; set; }
public Dictionary<string,object> ExtraParams { get; set; }
}
住所:私はこの
var john = new Person
{
Name: "John",
ExtraParameters: new Dictionary<string, object>
{
{ "AddressList", new List<Address>{
new Address{ StreetName : "Avenue 1" }
}
}
}
};
を行う方法の一つで
public class Address
{
public string StreetName { get; set; }
}
私もServiceStackのORMLiteを使用しています。私は、データベースからデータを取得し、辞書に戻ってそれをキャストしようとすると、今の問題が来る:「AddressListを」という名前のkey
で
//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
ですが、 value
は実際には文字列です - "[{StreetName:"Avenue 1"}]"
私は間違っていますか?私はオブジェクトと辞書の型キャスティングについてSOを見上げてきましたが、それらのどれも私と同じ問題を抱えていないようでした。私は、次のconfigsを設定している
:
はJsConfig.ExcludeTypeInfo = true;
JsConfig.ConvertObjectTypesIntoStringDictionary = true;
'AddressList'を' Type Serializer'を使って 'List
'として非直列化しようとします。 –