1

我在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 
   }
},
...

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

4

1 回答 1

1

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

然后,如果我需要访问或更改我使用Json.Encode/Decode返回动态的 web 帮助程序的数据,那么我可以添加子元素,如下所示:

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

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

于 2013-08-06T12:28:04.760 回答