我最近将我的视觉工作室从2013年升级到2015年。现在当我打开我的项目时,我在使用代码CA2235的自动生成代码中看到了很多警告。
以下是警告之一:
警告CA2235字段extensionDataField是WebServiceInputTrafficFinesInquiry类型的成员,它是可序列化的,但类型为System.Runtime.Serialization.ExtensionDataObject,不可序列化
SimpayRobot C:\ Users \ Admin \ Desktop \ Projects \ SimpayRobot_SVN \ trunk \ SimpayRobot \ SimpayRobot \ Service References \ RahvarService \ Reference.cs 22
无法直接序列化的所有字段都应具有NonSerializedAttribute。具有SerializableAttribute的类型不应具有不具有SerializableAttribute的类型字段,除非字段使用NonSerializedAttribute标记。
该项目工作正常,但它使编程不舒服。我不知道该怎么做。它是自动生成的代码,我不想编辑它。
如何摆脱这些警告? 还有一件事:警告是因为我在项目中添加了肥皂服务参考。
更新: 我不想压制警告!我为什么要这样做?我想解决问题。
这是第22行:(它是自动生成代码的一部分。)
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
答案 0 :(得分:1)
当我开始使用FxCops检查源代码时遇到了同样的问题。通过这篇文章开始我的调查,似乎在reference.cs中的CA2235警告(由WCF服务自动生成)被归类为将在Visual Studio Update 3中解决的问题(有关详细信息,请参阅此链接https://github.com/dotnet/roslyn/issues/3898 )
此致 JRB
答案 1 :(得分:0)
您的字段/属性ExtensionDataObject
的类型不可序列化,但它是该类的一部分,标记为serializable
。
您应该将ExtensionDataObject
标记为Serializable
,或使用NonSerializedAttribute
进行装饰。
例如,如果您尝试将对象存储在会话中,它将无法序列化所有属性,并且可能会引发异常。
答案 2 :(得分:0)
深入了解警告。它告诉您Field(可能是隐式)标记为可序列化,而其类型不可序列化。它告诉您将[NonSerialized]添加到该字段。
你可以像这样解决这个问题(我只是猜测你的代码可能是什么样子):
[Serializable]
public class WebServiceInputTrafficFinesInquiry
{
// ...
[NonSerialized]
ExtensionDataObject extensionDataField;
// ...
}
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms182349.aspx。