模型绑定POST与NancyFx中的对象数组

par*_*man 12 data-binding post json deserialization nancy

我有一个具有以下结构的json对象

{
 ContainerType: "Box",
 Items : [{Name: "Coin", Amount: 5}, {Name: "Spyglas", Amount : 1}]   
}
Run Code Online (Sandbox Code Playgroud)

该对象在Nancy后端系统中有一个表示:

public string ContainerType {get; set}
public IEnumberable<Item> Items {get; set}
Run Code Online (Sandbox Code Playgroud)

其中Item(如预期)是一个非常简单的公共属性对象:

public string Name {get; set;}
public double Amount {get; set;}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我在我的模块中收到Post(基于NancyModule)时,只有字符串属性被绑定在这行代码中:

var model = this.databind<MyContainerModel>();
Run Code Online (Sandbox Code Playgroud)

我已尝试将列表类型更改为更具体(List <MyContainerModel>),更改为Arrays(MyContainerModel []),但似乎没有任何效果.

Nancy的git-repo演示部分中的数据绑定示例仅涉及整数的反序列化,但我的问题是使用javascript对象对数组进行反序列化.

有任何想法吗?

谢谢!

par*_*man 23

几个小时后,我找到了解决方案.问题不在南希的部分,而是我的ajax帖子没有正确的标题.添加contentTypedataType就可以了:

$.ajax({
    url: '/add',
    type: 'POST',
    data: normalModel,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',

})
Run Code Online (Sandbox Code Playgroud)

希望这有助于未来的读者!

  • 上面的normalModel需要是JSON格式而不仅仅是JS对象.要转换它,请使用JSON.stringify(normalModel).这让我感到高兴. (2认同)