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

本文关键字:MVC 控制器 模型 动态 json 对象 | 更新日期: 2023-09-27 18:25:30

我在javascript:中有一个这样的模型

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

然后我需要把它发送到MVC,这样我就可以把它保存在mongodb中,但是我不知道如何最好地把元数据存储在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 
   }
},
...

我最终会为元数据字段创建expando对象,因为我知道something字段,但不会在第一次遍历下面存储任何数据,所以除了将其转换为要存储的json字符串之外,还有什么方法可以存储上面的数据吗?

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

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

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

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

然后我只是再次对其进行编码,将动态作为一个对象。