将JSON数据反序列化为C#中的任何类型

时间:2013-10-08 19:11:19

标签: c# javascript asp.net-mvc json

我希望能够将任何类型的数据从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,string,array,associative array,date等。

在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#中有一些泛型类型可供我使用吗?

2 个答案:

答案 0 :(得分: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 }),

答案 1 :(得分:1)

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

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