我无法在任何地方找到这个问题的答案,但是当我尝试使用 static 或 const 成员变量序列化结构或类时,默认情况下它们不会序列化。如果我尝试通过设置强制序列化MemberSerialization.OptIn
,我收到错误。
ex.
[JsonObject(MemberSerialization.OptIn)]
public class Test
{
[JsonProperty]
public int x = 1;
[JsonProperty]
public static int y = 2;
}
如果我尝试使用以下命令序列化此类:
Test t = new Test();
string s = JsonConvert.SerializeObject( t );
我收到错误Error getting value from 'y' on 'Test'
。如果 y 是 const,也会发生同样的情况。
我的理论是,静态和常量值存储在内存中的特殊位置,并且由于某种原因,Json 序列化程序在尝试访问它们时失败。但这完全是一种预感,我在其中看不到任何东西静态 C# 参考 http://msdn.microsoft.com/en-us/library/vstudio/98f28cdx%28v=vs.110%29.aspx这有什么帮助。我对 C# 比较陌生——目前这确实是一个好奇的问题。
如果愿意的话,它当然可以序列化静态变量。序列化是通过使用 Reflection API 检查对象和类型来完成的,这些 API 允许您执行“任何操作”——没有技术原因导致这些值无法序列化。
然而,默认情况下不支持这一点有一个合乎逻辑的理由:它没有多大意义。您正在序列化一个instance, and static
or const
成员在逻辑上不是实例的一部分,而是整个类的一部分。
也就是说,您仍然可以序列化static
成员(如果是财产):
[JsonProperty]
public static int y { get; set; } // this will be serialized
当然,您可以通过创建自定义来完全覆盖序列化器的行为JsonConverter
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)