.Net对象序列化为json,使用xml属性控制属性。我现在想将同一个对象序列化为Json,最好使用NewtonsoftJson.Net库。我想直接从内存中的.Net对象转到Json字符串(无需先序列化为Xml)。我不想向类添加任何Json属性,而是希望Json序列化程序使用现有的Xml属性。publicclassworld{[XmlIgnore]publicintignoreMe{get;}[XmlElement("foo")]publicintbar{get;}[XmlElement("marco")]publicintpolo{get;}}更改{"foo":0,"marco":0}使用[JsonProperty(PropertyName="foo")]属性并设置PropertyName。事实证明,这不是NewtonsoftJson.Net库的现有功能。我编写了一个补丁并将其上传到Json.Net问题跟踪器(存档链接在这里):这允许以下操作:您可以创建一个自定义合同解析器,它允许您调整属性并设置它们设置位置以忽略XmlIgnoreAttribute。公共类CustomContractResolver:DefaultContractResolver{privatereadonlyJsonMediaTypeFormatter格式化程序;publicCustomContractResolver(JsonMediaTypeFormatterformatter){this.formatter=formatter;}publicJsonMediaTypeFormatterFormatter{[DebuggerStepThrough]get{returnthis.formatter;}}protectedoverrideJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemberSerialization){JsonPropertyproperty=base.CreateProperty(member,memberSerialization);this.ConfigureProperty(成员,属性);归还财产;}privatevoidConfigureProperty(MemberInfomember,JsonPropertyproperty){if(Attribute.IsDefined(member,typeof(XmlIgnoreAttribute),true)){property.Ignored=true;}}}通过在序列化对象时设置JsonSerializerSettings的ContractResolver属性,可以使用此自定义解析程序https://www.newtonsoft.com/json/help/html/ContractResolver.htsonConvertSproduct.htmConvertS=product.,//这是具有xml属性的对象es上你想忽略Formatting.Indented,newJsonSerializerSettings{ContractResolver=newCustomResolver()});如果您使用的是WebApi,则可以全局设置它以应用于所有合约varconfig=GlobalConfiguration.Configuration;varjsonSettings=config.Formatters.JsonFormatter.SerializerSettings;jsonSettings.ContractResolver=newCustomContractResolver();下面的类可用于将对象树的部分序列化(和反序列化)为XML,然后再序列化为JSON。使用方法[JsonObject]publicclassClassToSerializeWithJson{[JsonProperty]publicTypeThatIsJsonSerializablePropertySerializedWithJsonSerializer{get;放;}[JsonProperty][JsonConverter(typeof(JsonXmlConverter))]publicTypeThatIsXmlSerializablePropertySerializedWithCustomSerializer{get;放;}}JsonXmlConverter类上面描述的就是C#学习教程:将.Net对象序列化为json,并使用xml属性控制和共享所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){varxml=ToXml(valueasTType);使用(varstream=newStringReader(xml)){varxDoc=XDocument.Load(stream);varjson=JsonConvert.SerializeXNode(xDoc);writer.WriteRawValue(json);}}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){if(reader.TokenType==JsonToken.Null){//使用“null”令牌将读取器设置为正确的状态JToken.Load(reader);返回空值;}varjObj=JObject.Load(阅读器);varjson=jObj.ToString();varxDoc=JsonConvert.DeserializeXNode(json);varxml=xDoc.ToString();返回FromXml(xml);}publicoverrideboolCanRead=>true;publicoverrideboolCanConvert(TypeobjectType)=>objectType==typeof(TType);privatestaticTTypeFromXml(stringxmlString){使用(StringReaderreader=newStringReader(xmlString))return(TType)xmlSerializer.Deserialize(reader);}privatestaticstringToXml(TTypeobj){使用(StringWriterwriter=newStringWriter())使用(XmlWriterxmlWriter=XmlWriter.Create(writer)){XmlSerializerNamespacesns=newXmlSerializerNamespaces();ns.Add(String.Empty,String.Empty);xmlSerializer.Serialize(xmlWriter,obj,ns);返回writer.ToString();}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
