c# – 从XML转换为JSON时更改属性值
发布时间:2020-12-15 22:14:18 所属栏目:百科 来源:网络整理
导读:在一个项目中,我使用TSQL FOR XML从DB获取一些数据.在所有表中,Date字段的minimun值设置为01/01/1900. 那是因为空值不允许作为一个无法改变的内部政治. 使用xml结果我需要将其转换为JSON并将其序列化为客户端. 为此,我正在使用: string jSonString = Newton
在一个项目中,我使用TSQL FOR
XML从DB获取一些数据.在所有表中,Date字段的minimun值设置为01/01/1900.
那是因为空值不允许作为一个无法改变的内部政治. 使用xml结果我需要将其转换为JSON并将其序列化为客户端. 为此,我正在使用: string jSonString = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc,Newtonsoft.Json.Formatting.None,true); 好;现在我需要将每个01/01/1900日期转换为DateTime.MinValue(01/01/0001),同时转换为JSON;我怎么处理这个? 解决方法
UPDATE – 修改后的代码,适用于任何值为01/01/1900的节点/属性.
我会在转换为JSON之前处理XML文档.如果您的日期值是节点或属性值,这是LinqPad示例.由于我不知道你的XML数据结构只是简单的例子: void Main() { // IF IT IS NODE VALUE var xml = @"<data> <objectA> <dateValueA>01/01/1900</dateValueA> <dateValueB>01/01/1971</dateValueB> </objectA> <objectB> <dateValueA>01/01/2002</dateValueA> <dateValueB>01/01/1900</dateValueB> <dateValueZ>01/01/2011</dateValueZ> </objectB> <objectC> <dateValueA>01/01/1910</dateValueA> <dateValueB>01/01/2012</dateValueB> <dateValueC>01/01/1900</dateValueC> </objectC> </data>"; var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); var nodes = xmlDoc.SelectNodes("//*[text()='01/01/1900']"); foreach(XmlNode node in nodes) { node.InnerText = "01/01/0001"; } string jSonString = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc,true); "// IF IT IS NODE VALUE - RESULTS".Dump(); jSonString.Dump(); // IF IT IS ATTRIBUTE VALUE var xmlAttr = @"<data> <objectA dateValueA='01/01/1900' dateValueB='01/01/1900' dateValueC='01/01/2011' /> <objectB dateValueB='01/01/2011' someOtherDate='01/01/1900' /> <objectC dateValueC='01/01/1900' dontChangeThisDate='05/04/1923' /> </data>"; var xmlDocAttr = new XmlDocument(); xmlDoc.LoadXml(xmlAttr); var nodesAttr = xmlDoc.SelectNodes("//*[@*='01/01/1900']"); for(var i=0; i < nodesAttr.Count; i++) { foreach(XmlAttribute attrib in nodesAttr[i].Attributes) { if (attrib.Value == "01/01/1900") { attrib.Value = "01/01/0001"; } } } string jSonStringAttr = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc,true); "// IF IT IS ATTRIBUTE VALUE - RESULTS".Dump(); jSonStringAttr.Dump(); } 结果: // IF IT IS NODE VALUE - RESULTS {"objectA":{"dateValueA":"01/01/0001","dateValueB":"01/01/1971"},"objectB":{"dateValueA":"01/01/2002","dateValueB":"01/01/0001","dateValueZ":"01/01/2011"},"objectC":{"dateValueA":"01/01/1910","dateValueB":"01/01/2012","dateValueC":"01/01/0001"}} // IF IT IS ATTRIBUTE VALUE - RESULTS {"objectA":{"@dateValueA":"01/01/0001","@dateValueB":"01/01/0001","@dateValueC":"01/01/2011"},"objectB":{"@dateValueB":"01/01/2011","@someOtherDate":"01/01/0001"},"objectC":{"@dateValueC":"01/01/0001","@dontChangeThisDate":"05/04/1923"}} 这对你有用吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |