【问题标题】:WCF REST service dictionary serializationWCF REST 服务字典序列化
【发布时间】:2019-10-18 08:05:29
【问题描述】:

我在 WCF 服务中序列化字典时遇到问题。

[DataContract]
    public class UserInfo
    {
        [DataMember]
        public Guid ID { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public IDictionary<string, List<string>> Permissions { get; set; } = new Dictionary<string, List<string>>();
    }

这是当前响应的示例

{
    "ID": "1",
    "Name": "admin",
    "Permissions": [
        {
            "Key": "Users",
            "Value": [
                "Read",
                "Edit"
            ]
        },
        {
            "Key": "Management",
            "Value": [
                "Read"
            ]
        }
    ]
}

这是期望的回应

{
    "ID": "1",
    "Name": "admin",
    "Permissions": {
        "Users": ["Read", "Edit"],
        "Management": ["Read"]
    }
}

有没有办法在全局或特定属性上实现这一点?

【问题讨论】:

  • 谢谢,我会尝试那个解决方案,不过我会再留一个问题,看看是否有人发布任何序列化解决方案。
  • 那么成功了吗?
  • 当使用 AjaxDictionary 我得到 - 类型 'System.String[]' 与数据协定名称 'ArrayOfstring:schemas.microsoft.com/2003/10/Serialization/Arrays' 不是预期的。如果您使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。

标签: wcf dictionary datacontractjsonserializer json-serialization


【解决方案1】:

我已经按照here 的解释使用定制字典解决了这个问题。

因为我已经为序列化创建了这个类型

AjaxDictionary<string, string[]>

我必须添加

[ServiceKnownType(typeof(string[]))]

在我的class 上,即ServiceContract 用于返回响应。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2015-03-21
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多