在 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# 中有一些可以使用的泛型类型?
从技术角度来看,这是可能的。但是你必须自己弄清楚几个重要的细节:
- 你怎么知道你要构造什么类型的对象?
- 您将如何构建这种类型的对象?你能假设该类型有一个默认构造函数吗?你会使用某种 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