C#学习教程:Azure移动应用程序的自定义JSON序列化为了避免我自己代码的复杂性,我从头开始建立一个新项目。VisualStudioCommunity2015Update2,AzureAppServiceToolsv2.9(如果重要的话)。新项目、VisualC#、云、Azure移动应用程序。在App_StartStartup.MobileApp.cs这是模板中的内容:publicstaticvoidConfigureMobileApp(IAppBuilderapp){HttpConfigurationconfig=newHttpConfiguration();新的MobileAppConfiguration().UseDefaultConfiguration().ApplyTo(配置);//使用EntityFrameworkCodeFirst基于您的DbContext创建数据库表Database.SetInitializer(newMobileServiceInitializer());MobileAppSettingsDictionarysettings=config.GetMobileAppSettingsProvider().GetMobileAppSettings();if(string.IsNullOrEmpty(settings.HostName)){app.UseAppServiceAuthentication(newAppServiceAuthenticationOptions{//此中间件旨在用于本地调试。默认情况下,HostName//只有在应用服务应用程序中运行时才有值.SigningKey=ConfigurationManager.AppSettings["SigningKey"],ValidAudiences=new[]{ConfigurationManager.AppSettings["ValidAudience"]},ValidIssuers=new[]{ConfigurationManager.AppSettings["ValidIssuer"]},TokenHandler=config.GetAppServiceTokenHandler()});}app.UseWebApi(config);这是我试过的:真},DefaultValueHandling=DefaultValueHandling.Ignore,NullValueHandling=NullValueHandling.Ignore,Formatting=Formatting.Indented};HttpConfiguration配置=newHttpConfiguration();配置。Formatters.JsonFormatter.SerializerSettings=JsonConvert.DefaultSettings();新的MobileAppConfiguration().UseDefaultConfiguration().ApplyTo(配置);...}运行它并访问http://localhost:53370/tables/TodoItem,json没有缩进,并且有一堆错误的字段,表明设置被忽略了,那么我该如何更改序列化程序设置以便他们在此配置中受到尊重?使用我自己的自定义设置从每个控制器返回一个JsonResult是可行的,但只允许我发送200OK状态(我必须跳过箍返回201Created以尊重我的设置)。看来Azure移动应用目前不遵守OWIN启动类中设置的序列化程序设置。我不知道它们是否被覆盖或未被使用,但控制器未接收到它们。作为一种解决方法,您似乎可以从控制器内部设置序列化程序设置:publicclassSomeController:ApiController{publicobjectGet(){SetSerializerSettings();做你的逻辑……DefaultValueHandling=DefaultValueHandling.Ignore,NullValueHandling=NullValueHandling.Ignore,Formatting=Formatting.Indented};Configuration属性尚未在构造函数中设置,因此您不能将SetSerializerSettings()放入其中,因为它会被覆盖。只要进程正在运行,这些设置似乎就会持续存在,所以它有点多余,但它似乎确实完成了工作。希望有人能过来提供正确的方法!在这上面花了很多时间之后,我认为您能做的最好的事情就是创建一个MobileAppControllerConfigProvider并将其传递给WithMobileAppControllerConfigProvider。这就是我正在做的,让所有控制器都尊重JsonConvert.DefaultSettings:JsonConvert.DefaultSettings=()=>newJsonSerializerSettings{/*something*/};varprovider=newMobileConfigProvider();varconfig=newHttpConfiguration();配置.MapHttpAttributeRoutes();config.Formatters.Remove(config.Formatters.XmlFormatter);config.Formatters.JsonFormatter.UseDataContractJsonSerializer=false;config.Formatters.JsonFormatter.SerializerSettings=provider.Settings;新的MobileAppConfiguration()。地图API控制器()。添加MobileAppHomeController()。添加推送通知()。WithMobileAppControllerConfigProvider(提供者)。适用于(配置);和:sealedclassMobileConfigProvider:MobileAppControllerConfigProvider{readonlyLazysettings=newLazy(JsonConvert.DefaultSettings);publicJsonSerializerSettingsSettings=>settings.Value;publicoverridevoidConfigure(HttpControllerSettingscontrollerSettings,HttpControllerDescriptorcontrollerDescriptor){base.Configure(controllerSettings,controllerDescriptor);controllerSettings.Formatters.JsonFormatter.SerializerSettings=设置;作为DevNoob的回答,OWIN启动类中的序列化程序设置无效当在每个控制器类的Initialize(HttpControllerContextcontrollerContext)方法中设置时,它有效。在我的例子中,我遇到了自引用问题,所以我这样解决了它:;base.Initialize(controllerContext);MyMobileAppContextcontext=newMyMobileAppContext();DomainManager=newEntityDomainManager(context,Request);}....}我建议小心这里提供的答案。在我们使用iOS应用程序中的离线同步表之前,一切都很好。就我而言,它们无缘无故崩溃,很可能它们需要一些非默认序列化设置才能正常运行。我使用了NunoCruses的解决方案,当我恢复时一切都恢复正常。以上就是C#学习教程:Azure移动应用自定义json序列化分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
