c# - 从 MVC 应用程序中的预编译类序列化 JSON 对象

标签 c# json asp.net-mvc serialization

我正在尝试序列化一个 JSON 对象以将其从 Controller 发送到 View 。尽管阅读了大量类似的问题,但我没有找到行之有效的解决方案。

在我的例子中,我有一个 List<MyType> object,其中是一个预编译的类。但是当我尝试通过以下方式序列化数据时:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(MyType));

我收到以下错误:

Additional information: Type MyType cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.

但是,因为是预编译类,所以不能标记成员。我该如何解决这个问题?

最佳答案

DataContractJsonSerializer使用选择加入语义,这意味着您必须使用 [DataContract] 属性标记要序列化的类,并使用 [ 标记要序列化的那些类的所有成员数据成员]。如果您无法更改这些类(因为它们是预编译的或者您无法控制源代码),那么除了将数据复制到另一个 可以被连载。但是,对于 ASP.NET MVC,您实际上不应该使用 DataContractJsonSerializer——这个序列化程序是为 WCF 创建的并且不是很灵活或用户友好,IMO。

ASP.NET MVC 框架有一个 Json基本 Controller 中内置的方法,它使用 JavaScriptSerializer在幕后序列化您的模型对象。这个序列化器不需要用属性标记类,并且因为它是内置的,所以您不必将任何特殊的序列化代码放入您的 Controller 方法中即可使用它。只需更改您的方法以返回 JsonResult 而不是 ActionResult,然后将您的对象作为最后一项业务传递给 Json 方法。

例如:

[HttpGet]
public JsonResult GetItem(int id)
{
    PrecompiledClass pc = RetrieveObjectFromDatabaseOrWhatever(id);

    return Json(pc, JsonRequestBehavior.AllowGet);
}

JavaScriptSerializer 确实有一些限制,我不会在这里讨论,在大多数正常情况下您可能不会遇到这些限制。但是,如果您确实发现 JavaScriptSerializer 不适合您的需求,您可以切换到强大的第三方序列化程序,例如 Json.Net。 .参见 ASP.NET MVC and Json.NETUsing JSON.NET as the default JSON serializer in ASP.NET MVC - is it possible?了解有关该选项的更多信息。

关于c# - 从 MVC 应用程序中的预编译类序列化 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640339/

相关文章:

c# - Hololens - 访问相机框架

C# 优先级列表

javascript - 将给定格式的字符串转换为 json

c# - Xamarin Android反序列化本地json文件

asp.net-mvc - 哪种模型绑定(bind)方法在 ASP.NET MVC 中具有最佳的单元测试语义?

c# - 在 MVC 中调用方法而不加载 View

c# - Windows服务中的计时器未调用经过的事件

c# - 来自引用的 .NET Standard 项目的多个 DLL

Java使用GSON处理一段json

asp.net-mvc - Asp.Net MVC 中的管理区域