mis*_*ger 5 c# activereports json.net roslyn visual-studio-2015
我有一个问题,JsonMediaTypeFormatter
据我所知,刚刚开始发生的事情.
在某些时候,我拥有的对象(一个普通的老poco)开始序列化完成作为支持字段.我正在使用自动属性(再次只是一个poco),但无论出于什么原因,输出JsonMediaTypeFormatter
是k__backingfield<propname>:"value"
在过去的几周里,我们已经升级到2015年的视觉工作室(虽然我怀疑这是问题的根本原因,因为这已经工作了几周).
我已经清除了所有形式的nuget缓存,删除了所有bin/obj目录....卸载并重新安装了visual studio 2015专业...修复了visual studio 2015专业....这段代码在一段时间内没有改变.
我们使用的版本5.2.0
的System.Net.Http.Formatting
.
感谢您的任何帮助.
只是一个快速更新....这不会发生在任何其他人的机器上.我没有遇到任何错误(我注意到).我还要为此添加一些visual studio 2015相关标签
好的另一个快速更新.我已经发送了一个LinqPad脚本以及将该脚本运行到同事所需的程序集.我发送的程序集是我从nuget中提取并在我的机器上编译的精确程序集.当他运行代码时,它会根据需要进行序列化.我的机器(现在是另一个同事的机器)仍在遇到问题.
我将继续尽可能地隔离这一点,但任何进一步的指导将不胜感激
我可以通过将JsonMediaTypeFormatter.UseDataContractJsonSerializer
属性转换为解决此问题true
.我正在做更多的研究,为什么这个有效,为什么我想要或不想做这个...我必须在早上与没有这个问题的同事一起进行更多的测试.我不喜欢代码更改的想法,修复一些行为不可预测的事情.
好!还有一个更新.到目前为止,受影响的计算机最近安装了Active Reports 10.我们正在执行更多测试,并将在当前不受影响的计算机上安装活动报告10,以确定是否确实是罪魁祸首.为Active Reports添加标记.如果这最终成立,我会向他们打开一个错误.
您的POCO是否标有[Serializable]
属性?如果是这样,这可能是问题的原因.
Web API显然附带了一个DefaultContractResolver
配置的Json.Net IgnoreSerializableAttribute = false
.其中一个此设置的效果是,汽车属性的名称将在格式序列<PropertyName>k__BackingField
,其中PropertyName
替换属性的实际名称.
要解决此问题,您可以[Serializable]
从类中删除该属性,也可以将现成的解析程序替换为具有新属性的解析程序IgnoreSerializableAttribute = true
.要执行后者,请将以下内容添加到以下Application_Start
方法中Global.asax
:
var resolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
resolver.IgnoreSerializableAttribute = true;
var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = resolver;
Run Code Online (Sandbox Code Playgroud)
这是一个演示概念的小提琴(虽然它是一个控制台应用程序,而不是Web API):https://dotnetfiddle.net/Bu6lgy