C# NancyModule未反序列化JSON正文

C# NancyModule未反序列化JSON正文,c#,.net,json,http,nancy,C#,.net,Json,Http,Nancy,我的模块中有一个路由,它应该接受一个代表博客文章的JSON主体。问题是请求主体没有被序列化。如果我调试,我会在请求中看到以下值: this.Request.Body.Length: 93 x.Keys.Count: 0 路线 Post["/Blog"] = x => { var post = this.Bind<Post>(); //Breakpoint PostService.Save(post);

我的模块中有一个路由,它应该接受一个代表博客文章的JSON主体。问题是请求主体没有被序列化。如果我调试,我会在请求中看到以下值:

this.Request.Body.Length: 93
x.Keys.Count: 0
路线

Post["/Blog"] = x =>
        {
            var post = this.Bind<Post>(); //Breakpoint

            PostService.Save(post);
            return post;
        };
反序列化: 您的代码没有问题,问题是您已经包装了JSON:

您的对象有一个名为
Post
的属性,然后它就有了实际的Post

更新您的身体,使其看起来像:

{“Title”:“Hello”,“Content”:“World”,“Created”:“2014-04-26”}

这很可能与
Post
对象上的属性相匹配


下面是对客户端的序列化,而不是问题所要求的


序列化: 您需要添加一个
Accept
标题

我在这里写过南希·康涅格:

您的场景不起作用,因为您只是告诉服务器您的内容是什么,而不是您期望得到什么回报

接受 使用Chrome插件-Postman,您可以测试类似于以下内容的场景:

通过将
Accept
标题作为
application/json
应用,返回的内容将被序列化

.json url 或者,您可以将
.json
添加到URL末尾,以json形式返回:

http://yoursite.com/blog.json

Post["/Blog"] = x =>
{
    var post = this.Bind<Post>(); //Breakpoint

    PostService.Save(post);
    
    return Response.AsJson(post);
};
这将强制JSON序列化程序启动

.AsJson() 如果希望始终返回JSON,则可以使用
.AsJson()

Post[“/Blog”]=x=>
{
var post=this.Bind();//断点
PostService.Save(post);
返回Response.AsJson(post);
};

注意,如果您返回的是
动态
类型,则需要强制转换它:
返回Response.AsJson((object)post)

我现在知道我的问题格式不正确。我的意思是对发送到服务器的JSON主体进行反序列化。我希望将JSON序列化为Post对象。根据文档,反序列化是由内容类型标题触发的,我有这个标题,所以我肯定错过了其他内容。更新到我答案的顶部。到博客帖子的链接被破坏。试试这个:谢谢@norbertson我更新了答案中的链接。
Post["/Blog"] = x =>
{
    var post = this.Bind<Post>(); //Breakpoint

    PostService.Save(post);
    
    return Response.AsJson(post);
};