当前位置: 首页 > 网络技术

js json序列化,js中怎么序列化json字

 时间:2020-04-15 09:36:25 来源: 

Serializer序列化对象时,如何去掉空元素

使用XmlSerializer可以方便的将对象序列化为xml,实现应用之间的数据交互。但是XmlSerializer却不能很好地序列化类型中的可为null的字段。 例如,有如下定义的类Person:[Serializable] [XmlRoot(ElementName = "Person")] public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int? Age { get; set; } } [Serializable] [XmlRoot(ElementName = "Person")] public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int? Age { get; set; } }其中的Age属性为Nullable int类型。 我们的实例化代码如下所示:var person = new Person { FirstName = "First", }; person.OutputXml(Console.Out); var person = new Person { FirstName = "First", }; person.OutputXml(Console.Out);其中方法OutputXml为扩展方法,使用XmlSerializer来序列化对象,具体定义为:public static void OutputXml<T>(this T dto, TextWriter textWriter) { var xmlTypeMapping = typeof(T); var serializer = new XmlSerializer(xmlTypeMapping); var xmlns = new XmlSerializerNamespaces(); xmlns.Add(string.Empty, string.Empty); using (var writer = new XmlTextWriter(textWriter) { Formatting = Formatting.Indented }) { serializer.Serialize(writer, dto, xmlns); } } public static void OutputXml<T>(this T dto, TextWriter textWriter){ var xmlTypeMapping = typeof(T); var serializer = new XmlSerializer(xmlTypeMapping); var xmlns = new XmlSerializerNamespaces(); xmlns.Add(string.Empty, string.Empty); using (var writer = new XmlTextWriter(textWriter) { Formatting = Formatting.Indented }) { serializer.Serialize(writer, dto, xmlns); }}使用上述方法序列化对象person,得到的结果为: 注意到虽然Age属性为空,却仍然被序列化成 了古怪的xml,这往往不是所期望的结果。事实上同为空的LastName属性的序列化正是大多数情况下我们所期望的行为——忽略为空的属性。 另一方面,如果试图序列化类属e5a48de588b6e799bee5baa6e997aee7ad9431333361326236性为xml 属性(而非xml元素),则甚至不能工作。例如如果我们将Person类的定义修改成如下形式以便序列化为xml属性:[Serializable] [XmlRoot(ElementName = "Person")] public class Person { [XmlAttribute] public string FirstName { get; set; } [XmlAttribute] public string LastName { get; set; } [XmlAttribute] public int? Age { get; set; } } [Serializable] [XmlRoot(ElementName = "Person")] public class Person { [XmlAttribute] public string FirstName { get; set; } [XmlAttribute] public string LastName { get; set; } [XmlAttribute] public int? Age { get; set; } }Xmlserializer甚至无法正常序列化上面同样的person对象并抛出如下“XmlAttribute/XmlText cannot be used to encode complex types”的错误: 如何解决上述的2个问题呢? 1. 序列化可为null属性输出为XmlElement 为了在序列化可空属性的时候忽略空值的古怪输出,我们可以在Person类中定义一个返回bool的特殊方法 ShouldSerializeAge,并在其中实现定义我们的序列化规则:[Serializable] [XmlRoot(ElementName = "Person")] public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int? Age { get; set; } public bool ShouldSerializeAge() { return Age.HasValue; } } [Serializable] [XmlRoot(ElementName = "Person")] public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int? Age { get; set; } public bool ShouldSerializeAge() { return Age.HasValue; } }在这里我们定义序列化规则为:序列化非空Age。注意该方法的名字一定是以ShouldSerialize开头并连接上需要自定义规则的属性名 称。这样序列化出来的person对象为: 空的Age和空的LastName一样在序列化时被忽略了输出。正是我们期望的结果! 2. 序列化可为null的属性输出为XmlAttribute 由于可空属性无法被直接序列化为XmlAttribute,我们需要采用间接的办法——定义间接属性。此时我们可以如下定义Person类:[Serializable] [XmlRoot(ElementName = "Person")] public class Person { [XmlAttribute] public string FirstName { get; set; } [XmlAttribute] public string LastName { get; set; } [XmlIgnore] // (4) public int? Age { get; set; } [XmlAttribute(AttributeName = "Age")] // (1) public string AgeValue { get { // (2) return Age.HasValue ? Age.Value.ToString() : null; } set { int result; // (3) Age = int.TryParse(value, out result) ? result : (int?) null; } } } [Serializable] [XmlRoot(ElementName = "Person")] public class Person { [XmlAttribute] public string FirstName { get; set; } [XmlAttribute] public string LastName { get; set; } [XmlIgnore] // (4) public int? Age { get; set; } [XmlAttribute(AttributeName = "Age")] // (1) public string AgeValue { get { // (2) return Age.HasValue ? Age.Value.ToString() : null; } set { int result; // (3) Age = int.TryParse(value, out result) ? result : (int?) null; } } }

js如何将数组序列化?

直接转成JSON字符串,存进去就行了。eval或用别的什么 json2Object的方法在转回对象就可以了。Javascript,一种高级编程语言,通过copy解释执行,是一门动态类型,面向对象(基于原型)的直译语言。它已经由欧洲电脑制造商协会通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏知览器(Chrome、IE、FireFox等)支持。JavaScript是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。JavaScript虽与Java有很多相似性,但这两门编程语言从设计之初就有很大的不同,JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响。在语法结构上它又道与C语言有很多相似(例如if条件语句、while循环、switch语句、do-while循环等)。本回答被网友采纳

javascript字符串数组序列化后可用json2反序列化

把json对象转化成字符串 var sites = { "a":"a","b":"b"}JSON.stringify(sites)

js反序列化list怎么实现

你的List如果是个字符串,那就直接这样写var list="123456";var newList="";for(var i=list.length-1;i>=0;i--){ newList+=list[i];}alert(newList);如果是数zhidao组那更简单,JS有个原始的方法array.reverse()

3dmax8.0激活码 序列号666-12345678 申请号SLSV 194V VWZ4 HRE1 K1HZ 2H8U 3JS8

XDXGTERTAA2FYFU9 6RX79DVWC8CH36C7