加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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"}}

这对你有用吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读