为什么JSON.Net不能序列化static或const成员变量?我无法在任何地方找到答案,但是当我尝试使用静态或const成员变量序列化结构或类时,默认情况下它们不会序列化。如果我尝试通过设置MemberSerialization.OptIn来强制序列化,我会收到错误消息。善良。[JsonObject(MemberSerialization.OptIn)]publicclassTest{[JsonProperty]publicintx=1;[Json属性]publicstaticinty=2;如果我尝试使用以下方法序列化此类:Testt=newTest();字符串s=JsonConvert.SerializeObject(t);我收到错误Errorgettingvaluefrom'y'on'Test'。如果y是常量,也会发生同样的情况。我的理论是static和const值存储在内存中的特殊位置,并且出于某种原因Json序列化程序试图访问它们。这完全是一种预感,我在C#ReferenceforStatic中看不到任何帮助。我是C#的新手-在这一点上这确实是一个奇怪的问题。如果需要,它当然可以序列化静态变量。序列化是通过使用允许您做“任何事情”的反射API检查对象和类型来完成的——没有技术原因不能序列化这些值。然而,有一个合乎逻辑的理由不支持默认情况:它没有多大意义。您正在序列化一个实例,static或const成员在逻辑上不是实例的一部分,而是整个类的一部分。也就是说,如果它是一个属性,您仍然可以序列化静态成员:[JsonProperty]publicstaticinty{get;放;}//这将被序列化当然,您可以通过创建自定义JsonConverter程序的行为来完全覆盖序列化。从Json.NET6.0.4开始,static和const成员变量以及静态属性在标记为[JsonProperty]时将被序列化。从发行说明:所以序列化以下类:[JsonObject(MemberSerialization.OptIn)]publicclassTest{[JsonProperty]intx=1;[Json属性]staticinty=2;[Json属性]constintz=333;}产生{"x":1,"y":2,"z":333}。示例小提琴。试试这个:使用Newtonsoft.Json;使用System.Collections.Generic;使用System.Linq;publicstaticstringSerializeStaticClass(System.Typea_Type){varTypeBlob=a_Type.GetFields().ToDictionary(x=>x.Name,x=>x.GetValue(null));返回JsonConvert.SerializeObject(TypeBlob);我这样做是为了将所有静态类常量序列化到一个JS文件中,然后将该文件捆绑到一个角度应用程序中。将生成的js对象附加到$rootScope,所有角度代码都可以访问常量。帽子提示如果您需要在每个实例的基础上序列化静态成员(或常量),您可以使用私有实例级访问器作为解决方法:[JsonObject(MemberSerialization.OptIn)]publicclassTest{[JsonProperty]公共整数x=1;//我们希望在每个实例中序列化的静态成员publicstaticinty=2;//私有访问器允许Json.net序列化静态成员[JsonProperty("y")]privateinty1{get{returny;如果您还需要反序列化到此类,此方法将阻止Json.Net覆盖静态成员,同时仍允许您自己的代码在需要时对其进行修改。以上是C#学习教程:为什么JSON.Net不能序列化static或const成员变量?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
