ServiceStack-字典中的数组反序列化为字符串

时间:2019-03-06 13:54:37

标签: servicestack servicestack-text

我有一个DT0,它具有以下属性

public Dictionary<string,object> Parameters {get;set;}

现在我面临的挑战是,如果我向Parameters添加一个数组,它将被反序列化为一个字符串。有没有一种方法可以正确地反序列化它。

我有一个选择是拥有一个强类型的Parameters属性,不幸的是,由于我正在努力使它尽可能地动态,因此它在我的情况下不起作用。

1 个答案:

答案 0 :(得分:3)

尝试使DTO尽可能“动态”地运行是糟糕的服务设计,在服务合同中造成了漏洞,以允许未知类型在大多数序列化程序中失败,在大多数non .NET languages中失败,不能被记录在元数据服务中,并且容易受到additional security restrictions的影响。

因此,如果您使用object类型的属性,则ServiceStack确实支持接受arbitrary JavaScript or JSON Objects

[Route("/callback")]
public class Callback : IReturn<CallbackResponse>
{
    public object Payload { get; set; }
}

但是我也刚刚扩展了它以支持this commit中的Dictionary<string,object>List<object>,现在它将使用更多的dynamic JSON Serializer来解析对象属性和对象集合。从v5.4.1。起可以使用此更改。

但是出于上述原因,仍应谨慎使用它,因为它会使您的服务不那么可互操作,并且更容易受到运行时问题的影响。

请考虑在属性值未知时使用string,并让您的服务将其解析为期望的类型,例如:

Dictionary<string,string> Properties { get; set; }

哪个具有更高的互操作性,并且没有允许未知的object出现的问题。