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

本文关键字:任何 类型 反序列化 数据 中将 JSON | 更新日期: 2023-09-27 18:34:23

我希望能够将任何类型的数据从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 可以是整数、字符串、数组、关联数组、日期等。

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

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

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

  • 你怎么知道你要构造什么类型的对象?
  • 您将如何构建这种类型的对象?你能假设该类型有一个默认构造函数吗?你会使用某种 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 }),

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

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