我们正在从Json.NET切换到ServiceStack.Text,我遇到了一个关于多态集合序列化的问题。
在JSON.NET中,我过去会创建一个自定义的JsonCreationConverter并重写Create()方法来选择我想要创建的类型 - 如此处所述:
这意味着我在发布JSON时需要提供类型,但我不太愿意让.NET类型对API调用中的任何人可见。
有什么建议吗?如果有其他方法可以实现此功能,您能给我指些示例吗?
在JSON.NET中,我过去会创建一个自定义的JsonCreationConverter并重写Create()方法来选择我想要创建的类型 - 如此处所述:
http://dotnetbyexample.blogspot.co.uk/2012/02/json-deserialization-with-jsonnet-class.html
所讨论的集合是List<ItemBase>
,其中包含FlightItem
或CarHireItem
对象。
这是我的JSON.NET Create()方法版本:
protected override ItemBase Create(Type objectType, JObject jsonObject)
{
var itemType = jsonObject["Type"].ToString();
switch (itemType)
{
case "flight":
return new FlightItem();
case "carhire":
return new CarHireItem();
default:
return null;
}
}
你能用ServiceStack实现这个吗?
在ServiceStack中,多态集合的序列化和反序列化是可行的,但是会将对象类型附加到JSON输出中,例如:
"__type" : "TestProject.Model.FlightItem, TestProject"
这意味着我在发布JSON时需要提供类型,但我不太愿意让.NET类型对API调用中的任何人可见。
有什么建议吗?如果有其他方法可以实现此功能,您能给我指些示例吗?