1

我希望能够将任何类型的数据从 javascript 发送到 C#。基本上,我正在尝试通过包含此对象的 AJAX 调用从 Javascript 端发送一个 JSON 对象-

AnObject = new Object;
AnObject.value = anyValue;

$.ajax({
    type: "POST",
    url: "myURL",
    data: "{ 'myObject':" + JSON.stringify(AnObject) + "}",
    dataType: 'json',
    success: function (data) {
        //do something
    }
});

anyValue 可以是 int、字符串、数组、关联数组、日期等。

在 C# 方面,我需要一个像 -

public AnyClass {
    DataType(?) value;
}

public ActionResult acceptData(AnyClass myObject) {
    Here, the data should be deserialized correctly depending on it's type into DataType(?)
}

这可能吗?我确定 C# 中有一些我可以使用的泛型类型?

4

2 回答 2

1

看看如何将 JSON 中的对象序列化和反序列化为它们对应的类型。这非常简单:

http://msdn.microsoft.com/en-us/library/bb412179.aspx

于 2013-10-08T19:25:56.943 回答
1

从技术的角度来看,这是可能的。但是你必须自己弄清楚几个重要的细节:

  • 你怎么知道你将构建什么类型的对象?
  • 您将如何构建该类型的对象?你能假设该类型有一个默认构造函数吗?你会使用某种 DI 框架吗?

如果您愿意说创建的所有对象确实需要是 POCO 样式的对象,这将变得非常简单:

public ActionResult acceptData() {
    Type type = FigureOutWhatTypeToUse();
    object instance = Activator.CreateInstance(type);
    // This allows ASP.NET MVC's model binding to do the dirty work,
    // initializing the properties of your instance based on the submitted
    // parameters.
    TryUpdateModel((dynamic) instance, "myObject"); 
}

如果要传入一个数组,请定义一个对象类型,该对象类型具有一个带有数组的属性。这样,MVC 可以了解属性应该是一个数组的事实并相应地绑定它。

PS-这对我来说似乎更具可读性且不易出错:

data: JSON.stringify({ myObject : AnObject }),
于 2013-10-08T19:24:46.883 回答