静的にする変更(次のリリースで利用可能)をコミットしたのでJsConfig<T>.TreatValueAsRefType
、構造体型を参照型としてシリアル化できるようになりました。例:
public struct UserStruct
{
public int Id { get; set; }
public string Name { get; set; }
}
JsConfig<UserStruct>.TreatValueAsRefType = true;
var dto = new UserStruct { Id = 1, Name = "foo" };
dto.ToJson().Print(); //= {"Id":1,"Name":"foo"}
dto.ToJsv().Print(); //= {Id:1,Name:foo}
dto.ToXml().Print();
ServiceStackは、.NETのXML DataContractSerializer(SOAPでも使用されます)を使用します。これは、次のように構造体を既に期待どおりにシリアル化します。
<?xml version="1.0" encoding="utf-8"?>
<UserStruct xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/ServiceStack.Text.Tests">
<Id>1</Id>
<Name>foo</Name>
</UserStruct>
静的APIを使用して、非ジェネリックAPIを使用して構造体タイプを登録することもできます。
JsConfig.TreatValueAsRefTypes.Add(typeof(UserStruct));