0

我想从我的 ASP.NET MVC WebAPI 应用程序中的方法返回具有以下签名的结果:

public class Result
{
    public int ResultCode { get; set; }
    public MapFeatureViewModel Params { get; set; }
    public string Message { get; set; }
}

MapFeatureViewModel 类型签名是

public class MapFeatureViewModel
{
    public long Id { get; set; }
    public string Uuid { get; set; }
    public string Feature { get; set; }
    public long MapId { get; set; }
}

到目前为止一切正常;但是,如果我尝试将 Result 类中的 Params 类型更改为“对象”或“动态”,以便将其用于所有其他方法,则会收到以下错误消息:

“您必须在使用本地名称'__type'编写属性之后编写属性'type'='object'。”

知道如何让 WebAPI 序列化非强类型属性吗?

4

2 回答 2

0

内置格式化程序不知道如何处理动态或对象。但是,您可以创建一个自定义格式化程序 (MediaTypeFormatter),它可以使用自定义逻辑将它们写出来。在格式化程序中,将“application/json”和“text/json”的 MediaTypeHeaderValue 实例添加到 SupportedMediaTypes 集合中。您还需要覆盖 CanWriteType 以将格式化程序限制为仅适用于您正在序列化的类型,即 MapFeatureViewModel。您需要在集合的开头插入该格式化程序,以便它运行而不是默认格式化程序。您可以通过访问配置对象上的格式化程序集合来完成此操作。

于 2012-06-12T07:55:58.690 回答
0

有几个替代方案需要考虑。在 Web API 中,您可以使用强类型 CLR 对象作为模型,它们会自动为客户端序列化为 XML 或 JSON。访问以获取更多信息

但是,您可以将 JSON 反序列化为 C# 动态对象。如何做到这一点,关于这个主题有一个很好的帖子。访问以获取更多信息

于 2012-06-13T13:17:43.510 回答