栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在WebAPI中的模型上使用Serializable属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在WebAPI中的模型上使用Serializable属性

默认情况下,Json.NET会忽略该

Serializable
属性。不过,根据要评论此答案由张曼玉颖,覆盖的WebAPI这种行为,这会导致你的输出。

默认情况下,Json.NET序列化程序将IgnoreSerializableAttribute设置为true。在WebAPI中,我们将其设置为false。遇到此问题的原因是Json.NET忽略了属性:“
Json.NET现在检测到具有Seri​​alizableAttribute的类型,并对该类型上的所有字段(包括公共字段和私有字段)进行序列化,并忽略属性”(引自james。
newtonking.com/archive/2012/04/11/…

一个简单的示例演示没有WebAPI时的相同行为,如下所示:

using Newtonsoft.Json;using Newtonsoft.Json.Serialization;using System;namespace Scratch{    [Serializable]    class Foo    {        public string Bar { get; set; }    }    class Program    {        static void Main()        { var foo = new Foo() { Bar = "Blah" }; Console.WriteLine(JsonConvert.SerializeObject(foo, new JsonSerializerSettings()     {         ContractResolver = new DefaultContractResolver()         {  IgnoreSerializableAttribute = false         }     }));        }    }}

有几种方法可以解决此问题。一种是用普通

JsonObject
属性装饰模型:

[Serializable][JsonObject]class Foo{    public string Bar { get; set; }}

另一种方法是覆盖的默认设置

Application_Start()
。根据此答案,默认设置应执行以下操作:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();

如果那不起作用,您可以明确地知道它:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings()    {        ContractResolver = new DefaultContractResolver()        { IgnoreSerializableAttribute = true        }    };


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号