将 xml 数据序列化为 json 时忽略命名空间属性

Posted

技术标签:

【中文标题】将 xml 数据序列化为 json 时忽略命名空间属性【英文标题】:Ignore namespace attributes while serializing xml data to json 【发布时间】:2021-01-23 14:19:48 【问题描述】:

我正在尝试使用JsonSerializer() 将 xml 直接序列化为 json,但命名空间属性正在作为最终 json 中的字段添加。关于如何删除它的任何建议?我尝试使用JsonConvert.Serialize(),但序列化的 json 中缺少一些子节点。

【问题讨论】:

【参考方案1】:

解决您的问题的方法可能是首先将您的对象反序列化为字典。这样您就可以在转换之间添加一些逻辑。

查看以下示例:

            var xml = @"<?xml version='1.0' standalone='no'?>
            <root>
              <person id='1'>
                <name>Alan</name>
                <url>http://www.google.com</url>
              </person>
              <person id='2'>
                <name>Louis</name>
                <url>http://www.yahoo.com</url>
              </person>
            </root>";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);

            var childNodeList = doc.DocumentElement.ChildNodes;

            for (int i = 0; i < childNodeList.Count; i++)
            
                var nodes = childNodeList.Item(i).ChildNodes;

                var dict = new Dictionary<string, object>();

                foreach (XmlNode node in nodes)
                
                    var serializedNode = JsonConvert.SerializeXmlNode(node);

                    var prop = JsonConvert.DeserializeObject<IDictionary<string, object>>(serializedNode).FirstOrDefault();

                    dict.Add(prop.Key, prop.Value ?? " ");
                

                Console.WriteLine($"item i");
                Console.WriteLine(string.Join("\r\n", dict.Select(e => $"e.Key: e.Value")));
            

输出:

     //item 0
     //name: Alan
     //url: http://www.google.com
     //item 1
     //name: Louis
     //url: http://www.yahoo.com

【讨论】:

感谢您的回复。我能够将 xml 序列化为 json。我关心的是命名空间。它们需要被移除。如果您查看您共享的文档,在转换规则中,您可以看到属性是使用@infront 转换的。我根本不需要它们。您还熟悉用空格替换空值的任何方法吗? Nullvaluehandling.ignore 不工作 @TimLeslie 我已经更新了我的答案。我希望这会对你有所帮助!

以上是关于将 xml 数据序列化为 json 时忽略命名空间属性的主要内容,如果未能解决你的问题,请参考以下文章

C#中json的命名空间是哪个,还要添加啥引用?

XML 序列化和命名空间前缀

ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

C# XMLSerializer 将错误的类型反序列化为 List

使用 Python >= 2.7 将嵌套的命名元组序列化为 JSON