我有一个DT0
,它具有以下属性
public Dictionary<string,object> Parameters {get;set;}
现在我面临的挑战是,如果我向Parameters
添加一个数组,它将被反序列化为一个字符串。有没有一种方法可以正确地反序列化它。
我有一个选择是拥有一个强类型的Parameters
属性,不幸的是,由于我正在努力使它尽可能地动态,因此它在我的情况下不起作用。
答案 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
出现的问题。