在ASP.NET Web API中的派生类中的典范化



在我的最后一个问题中,我询问了如何修改json.net的序列化设置,asp.net web api本身用于(de)序列化。接受的答案效果很好,例如,我能够将类型的信息嵌入到序列化的JSON字符串中。

但是,当我尝试将此JSON字符串扔回到期望模型的父类中的Web API操作中时,Web API仍然可以挑选到父级,请删除与子类相对应的所有数据,并防止施放和检测到和检测

class Entity { }
class Person : Entity { }

public Person Get() {
    return new Person();
}
public bool Post(Entity entity) {
    return entity is Person;
}

一个简单的用例将在jQuery中进行这样的操作:

// get a serialized JSON Person
$.ajax({
    url : 'api/person'      // PersonController
}).success(function (m) {
    // then throw that Person right back via HTTP POST
    $.ajax({
        url : 'api/person',
        type : 'POST',
        data : m
    }).success(function (m) {
        console.log(m);     // false
    });
})

我希望通过将json.net的 JsonSerializerSettings修改为嵌入类型的信息,至少可以将其强加于这种类型的信息,但显然不是。<<<<<<<<

我应该如何处理这样的问题?

Web API确实没有执行任何(de)序列化"本地"。它碰巧在config.formatters Collection中包含了一些介体形式图。随意删除这些并创建自己的介体形式的形式,以按照您希望完成的方式处理序列化。

MediatypeFormatters确实不难创建。

实际上,第二个帖子呼叫正在发送应用程序/x-www-form-urlencoded数据,这就是为什么jsonmediatypeformatter未访问类型信息的原因。尝试将ContentType设置为"应用/JSON"。

另外,第二个帖子请求主体中的数据似乎已编码,并且需要在发送回服务之前对其进行解码。

我能够使它起作用:

    // get a serialized JSON Person
    $.ajax({
        url: 'api/person'      // PersonController
    }).success(function (m) {
        // then throw that Person right back via HTTP POST
        $.ajax({
            url: 'api/person',
            type: 'POST',
            contentType: "application/json",
            data: JSON.stringify(m),
        }).success(function (m) {
            alert(m);     // true!
        });
    })

相关内容

  • 没有找到相关文章

最新更新