将动态json对象的模型传递给MVC控制器

时间:2013-07-30 19:41:35

标签: c# ajax asp.net-mvc json model-binding

我在javascript中有这样的模型:

function SomeModel()
{
   this.Id = ko.observable();
   this.Name = ko.observable();
   this.MetaData = {};
}

然后我需要将它发送给MVC所以我可以将它保存在mongodb中,但是我不知道如何最好将MetaData存储在C#表示中......因为模型看起来像:

public class SomeModel
{
   public Guid Id {get;set;}
   public string Name {get;set;}
   public object MetaData {get;set;}
}

然而,它不喜欢将json对象绑定到对象,我不确定我是否应该使用ExpandoObject或其他东西,因为我真的不喜欢访问c#mvc服务中的数据,它只适用于前端的插件可以将自己的数据存储在对象上以供以后使用。所以一个例子可能是:

var someModel = new SomeModel();
someModel.MetaData.Bookmarks = [];
someModel.MetaData.Bookmarks.push({ location: 120, document: 23003032 });

所以它可以包含任何东西和子对象,就像我说的那样,我只需要将它作为Mongo的传输机制插入到一个对象中,这样可以将其保存为无模式。

目前JS中的模型是通过Jquery通过ajax发送的,然后在控制器中自动绑定,然后发送到存储库。

==编辑==

我已经用MVC4做了一些小测试,我可以在我的模型中放置一个expando对象并填充它,但它似乎只存储1层数据,所以如果我要回发:

...,
MetaData: {
   something: {
       one: 1,
       two: 2 
   }
},
...

我最终会知道关于something字段的MetaData字段的expando对象,但是不会存储首次遍历下面的任何数据,所以有没有办法存储上面的内容而不是转向它成为要存储的json字符串?

1 个答案:

答案 0 :(得分:1)

由于似乎没有可靠的答案,我只需要在jquery ajax中执行额外的步骤,将所有“元数据”字段转换为json字符串,然后将其作为字符串存储在服务器上。

然后,如果我需要访问或更改数据,我使用返回动态的web帮助器Json.Encode/Decode,然后我可以添加我执行的子元素:

  • 简单包含json对象的匿名类型
  • 数组元素列表

然后我再次对其进行编码,将动态视为对象。