如何使用DataContractJsonSerializer将字符串数组序列化为JSON?这似乎与下面的问题相同,但答案尚未解决:DeserializingasimpleJSONarray我正在使用DataContractJsonSerializer将XML转换为JSON,反之亦然。一切都适用于复杂数据类型和复杂数据类型的数组,但我在为字符串数组生成JSON时遇到问题。我需要生成的JSON应具有以下结构:{"data":{"x_axis":{"labels":["Jan","Feb","Mar","Apr","May","Jun","Jul",Aug","Sep",Oct","Nov","Dec"]}}}我使用的对象是:-LineChartData:[DataContract]publicclassLineChartData{[DataMember(Name="x_axis")]publicLineChartXAxisXAxis{get;放;}}LineChartXAxis:[DataContract]publicclassLineChartXAxis{[DataMember(Name="labels")]publicstring[]Labels{得到;放;我试图转换的XML看起来像这样:JanFebMarAprMayJunJulAugSepOctNovDec我的反序列化代码是:varserialiser=newXmlSerializer(typeof(LineChartData));varstringReader=newStringReader(xml);varresult=serialiser.Deserialize(stringReader);我返回的JSON总是有一个空的标签数组:{"data":{"x_axis":{"labels":[]}}}我应该如何定义LineChartXAxis中的Labels属性以正确序列化JSON?您有几个问题:您的集合没有外部容器元素。默认情况下,XmlSerializer在序列化集合时添加容器元素。要跳过外部包装元素,请将[XmlElement("Labels")]属性添加到Labels属性。(XML序列化器属性和数据协定属性彼此独立,并且可以在一个集合不影响另一个的情况下应用。)即您的实际问题是从XML中读取字符串列表而不是写入JSON。您的JSON有一个外部根元素对应于{"data":{...}}对象。序列化时需要考虑到这一点。(也许你这样做了,但它没有出现。)因此下面应该有效:[DataContract]publicclassLineChartData{[DataMember(Name="x_axis")]publicLineChartXAxisXAxis{get;放;}}[DataContract]publicclassLineChartXAxis{[DataMember(Name="labels")][XmlElement("Labels")]publicstring[]Labels{get;放;}}[DataContract]publicclassRootObject{[DataMember(Name="data")]publicTData{get;放;}}publicstaticclassRootObjectExtensions{publicstaticRootObjectFromData(Tdata){returnnewRootObject{Data=data};}}然后像他们一样使用它们vardata=xmlString.LoadFromXML();varjsonString=DataContractJsonSerializerHelper.GetJson(RootObjectExtensions.FromData(data));使用扩展方法:publicstaticclassXmlSerializerHelper{publicstaticTLoadFromXML(thisstringxmlString,XmlSerializerserial=null){using(StringReaderreader=newStringReader(xmlString)){objectresult=(serial??newXmlSerializer(typeof(T))).反序列化(阅读器);如果(结果为T)返回(T)结果;}返回默认(T);}}publicstaticclassDataContractJsonSerializerHelper{publicstaticstringGetJson(Tobj,DataContractJsonSerializerserializer=null){using(varmemory=newMemoryStream()){(serializer??newDataContractJsonSerializer(typeof(T))).WriteObject(memory,对象);内存.Seek(0,SeekOrigin.Begin);使用(varreader=newStreamReader(memory)){returnreader.ReadToEnd();}}}}顺便说一句,作为替代方案,您可以查看Json.NET,它能够直接在JSON和XML之间转换传统数组不容易调整大小,我认为这就是序列化程序存在问题的原因。将您的Labels属性更改为List,这应该可以工作。以上是C#学习教程:如何使用DataContractJsonSerializer将字符串数组序列化为JSON?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
