只有一个对象时将 XML 转换为 Json 数组
Posted
技术标签:
【中文标题】只有一个对象时将 XML 转换为 Json 数组【英文标题】:Convert XML to Json Array when only one object 【发布时间】:2014-12-24 02:57:46 【问题描述】:我目前正在使用 Newtonsoft 将一些 xml 转换为 json 以从 RestExtension 返回。
我的xml格式是
<Items>
<Item>
<Name>name</Name>
<Detail>detail</Detail>
</Item>
<Item>
<Name>name</Name>
<Detail>detail</Detail>
</Item>
</Items>
我使用
将其转换为 jsonJsonConvert.SerializeXmlNode(xmldocument);
如果有多个项目,这很好用。
我明白了 - json 中的一组项目(这是我需要的):
"Items":"Item":["Name":"name","Detail":"detail","Name":"name","Detail":"detail"]
但是当只有一个时,它可以这样转换(不是数组):
"Items":"Item":"Name":"name","Detail":"detail"
正在阅读本文的我的应用程序开发人员需要 json 来返回一组项目,无论是否有一个或多个。
有没有办法让它认为它是一个数组,或者有人可以建议另一种方法吗?
【问题讨论】:
对不起,你想成为一个数组,不确定我是否正确地回答了这个问题 对不起,我已经编辑过,希望能更清楚。我需要一组物品。 @DJkraze 他已经完成了他所需要的转换,需要它一种不同的格式 @DJKRAZE,您发送的链接正是我正在做的。我只是需要不同的东西。除非我完全没有抓住重点,否则请解释或善意收回您的反对票。 好的,您可以执行以下操作吗,因为我无法从您的问题XmlNote myXmlNode = JsonConvert.DeserializeXmlNode(yourJsonString); // or .DeserilizeXmlNode(myJsonString, "root"); // if yourJsonString does not have a root
string jsonString = JsonConvert.SerializeXmlNode(myXmlNode); 中判断哪种格式正确或不正确;
【参考方案1】:
阅读此documentation about Serialize Xml Node
您可以通过这种方式强制使用 JSON 数组
var xml = @"<Items xmlns:json='http://james.newtonking.com/projects/json' >
<Item json:Array='true'>
<Name>name</Name>
<Detail>detail</Detail>
</Item>
</Items>";
DEMO
【讨论】:
太棒了!您是否碰巧知道如何使用 XElement 生成它,因为它不喜欢“:”? 谢谢我现在明白了。在下面我将如何使用 XElement 而不是 xmltextwritera 和 XDocument 进行操作 一旦 XML 文档已经在内存中,这有点困难。但是,可以使用 XmlNode.Attributes.Append(XMLAttribute) 方法直接将命名空间添加到节点。你会得到:如果它对任何人有帮助,请进一步参考 meda 的回复。 以下是使用 XElement 而不是 xmlTextWriter 和 XDocument 进行这项工作的方法
XNamespace ns = "http://james.newtonking.com/projects/json";
var items = new XElement("items",new XAttribute(XNamespace.Xmlns+"json",ns));
items.Add(new XElement("item",new XAttribute(ns+"Array",true),
new XElement("name", "name"),
new XElement("Detail", "detail")));
然后转换它
XmlDocument doc = new XmlDocument();
doc.LoadXml(items.ToString());
var converted JsonConvert.SerializeXmlNode(doc);
【讨论】:
【参考方案3】:Cinchoo ETL - 可用于将此类 xml 转换为预期 json 格式的开源库
string xml = @"<Items>
<Item>
<Name>name</Name>
<Detail>detail</Detail>
</Item>
</Items>";
StringBuilder sb = new StringBuilder();
using (var p = ChoXmlReader.LoadText(xml).WithXPath("/"))
using (var w = new ChoJSONWriter(sb)
.Configure(c => c.SupportMultipleContent = true)
)
w.Write(p);
Console.WriteLine(sb.ToString());
输出:
"Items": [
"Name": "name",
"Detail": "detail"
]
免责声明:我是这个库的作者。
【讨论】:
【参考方案4】:public class WSDLReport
private IEnumerable<WSDLDocument> _document;
private void SetDocuments(dynamic documents)
var type = documents.GetType();
if (type == typeof(JObject))
_document = new List<WSDLDocument>() ((JObject)documents).ToObject<WSDLDocument>() ;
else if (type == typeof(JArray))
_document = ((JArray)documents).ToObject<IEnumerable<WSDLDocument>>();
else
_document = new List<WSDLDocument>();
private dynamic GetDocuments() => _document;
[JsonProperty("dokumentyEzla")]
public dynamic Document
get => GetDocuments();
set => SetDocuments(value);
【讨论】:
以上是关于只有一个对象时将 XML 转换为 Json 数组的主要内容,如果未能解决你的问题,请参考以下文章
怎样将JAVA中得list集合转换为javascript的二维数组?
查询Mysql表之后将结果转换为json时如何能够保持字段的原有数据类型?