gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:36 25 4
gpt4 key购买 nike

我正在尝试序列化一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com