我无法在任何地方找到"字段"列为C#关键字.有谁知道这个背景?
我正在查看我正在处理的项目中的一些现有代码,我找到了一个实现为:
public class ThingOne
{
private int A;
private int B;
[NonSerialized]
private System.Timers.Timer timer1;
}
Run Code Online (Sandbox Code Playgroud)
它不应该看起来更像这样吗?
[Serializable]
public class ThingOne
{
private int A;
private int B;
[NonSerialized]
private System.Timers.Timer timer1;
}
Run Code Online (Sandbox Code Playgroud)
或者,即使类本身不是Serializable,添加[NonSerialized]还有一些额外的好处吗?
如何使用XML序列化的公共访问器指定NonSerialized字段?
[NonSerialized]
public String _fooBar;
//Declaring the property here will serialize the _fooBar field
public String FooBar
{
get { return _fooBar; }
set { _fooBar = value; }
}
Run Code Online (Sandbox Code Playgroud) c# serialization xml-serialization .net-3.5 nonserializedattribute
我在transcender上遇到了这个问题:
如果在反序列化期间不需要它的值,您应该对字段应用什么?
我= [NonSerialized],ANSWER = [OptionalField]
我的直觉反应是NonSerialised,但Transcender说我错了.就[非自动化]属性而言,我很清楚要注意什么,但我仍然希望这一点得到澄清.
据我所知,前者与同一程序集的较新版本和旧版本之间的版本冲突有关系.后者更关心的是没有序列化字段FULLSTOP.还有什么可以将这两者分开吗?MSDN并没有真正说明这一点,因为它们都使用XMLIgnoreAttribute在BinaryFormatters和SoapFormatter上使用XMLFormatter.
我的第二个问题是你可以混合搭配两个属性中的任何一个吗?我还没有使用它们.
只是抛出这个,但我的回答是否与[OnDeserialized]和IdeserilizationCallback接口的实现方式有关?
更新:
我知道可选字段属性不会序列化数据成员持有的值,但NonSerialized甚至不会序列化数据成员或其值.
[Serializable]
class MyClass
{
[NonSerialized] int Foo { get; set; } // error
[NonSerialized] int bar; // ok
}
Run Code Online (Sandbox Code Playgroud)
为什么不允许这样做?
我知道诸如此类的解决方法
问题是具体为什么 [NonSerialized]不允许在本地使用,但允许在字段上使用.