【问题标题】:ServiceStack - array inside dictionary deserialized to stringServiceStack - 字典内的数组反序列化为字符串
【发布时间】:2019-03-07 01:03:56
【问题描述】:

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

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

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

我的一个选择是拥有一个强类型的 Parameters 属性,不幸的是它不适用于我的情况,因为我正在努力使其尽可能动态。

【问题讨论】:

    标签: servicestack servicestack-text


    【解决方案1】:

    试图让你的 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&lt;string,object&gt;List&lt;object&gt;,现在它将使用更多dynamic JSON Serializer 来解析对象属性和对象集合。此更改从 v5.4.1 开始提供。

    但由于上述原因,仍应谨慎使用它,因为它会降低您的服务的互操作性并且更容易受到运行时问题的影响。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多