【问题标题】:How to avoid the ROOT Element when parsing from XML to JSON in C#在 C# 中从 XML 解析为 JSON 时如何避免 ROOT 元素
【发布时间】:2013-10-19 03:10:01
【问题描述】:

我正在尝试使用 JSON.NET 从 xml 创建 JSON

XmlDocument docPerson = new XmlDocument();
docPerson.LoadXml(xmlPerson); //xmlPerson is the xml from above
JObject personDefinition = JObject.Parse(JsonConvert.SerializeObject(docPerson));
Tasks.personDefinition = personDefinition["personDefinition"];

输出 JSON

"person":{"person":[{"personId":"1","firstName":"Name1","lastName":"lastName1"},                  {"personId":"3","firstName":"Name2","lastName":"lastName2"}]}

我不需要外人,只需要下面的json

必需的 JSON

"person":[{"personId":"1","firstName":"1","lastName":"Weight"},{"personId":"3","firstName":"4","lastName":"Pulse Ox"}]}

我曾尝试使用 .first 方法,但它会引发错误。任何人都可以建议如何从输出 json 中剥离根

【问题讨论】:

  • 你可以删除字符串的那部分。
  • 你的 xml 中是否有一个人根节点,然后是一个人节点?如果是这种情况,您可以尝试删除根元素 docPerson.LoadXml(docPerson.FirstChild.InnerXml);
  • 如果我们能看到您尝试解析的 XML 将会很有帮助
  • XML 是字符串 xml = "Nicolas22Pankaj姓名>25"

标签: c# .net xml json json.net


【解决方案1】:

JSON.Net 有一个 SerializeXmlNode() 方法,可以完全按照您的意愿行事。只需将true 传递给omitRootObject 参数。 观察:

string xmlPerson = @"<PersonDefinition><Person><name>Nicolas</name><age>22</age></Person><Person><name>Pankaj</name><age>25</age></Person></PersonDefinition>";
XmlDocument docPerson = new XmlDocument();
docPerson.LoadXml(xmlPerson);
string json = JsonConvert.SerializeXmlNode(docPerson, Formatting.None, true);
Console.WriteLine(json);

输出:

{"Person":[{"name":"Nicolas","age":"22"},{"name":"Pankaj","age":"25"}]}

【讨论】:

  • 我该如何包装 {"Person":[{"name":"Nicolas","age":"22"},{"name":"Pankaj","age":" 25"}]} 到 xml 中的单人属性,我想要其他方式。
  • @cracker 评论不适合提出新问题。如果您需要帮助,Ask a new question。您可以包含 a link back to this question 以提供上下文。
【解决方案2】:
string xml = "<PersonDefinition><Person><name>Nicolas</name><age>22</age></Person><Person><name>Pankaj</name><age>25</age></Person></PersonDefinition>";

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person[]), new XmlRootAttribute("PersonDefinition"));
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();

using (TextReader reader = new StringReader(xml))
{
    Person[] people = xmlSerializer.Deserialize(reader) as Person[];
    string json = jsonSerializer.Serialize(new Person());
}

使用这个的某种变体。

【讨论】:

  • 你输入的xml是正确的但是PersonDefinition里面有多个Person string xml = "Nicolas22人>Pankaj25"
  • 我无法解析 JavaScriptSerializer 命名空间。我的项目是 .Net 4.0 WebAPI 项目。我知道它需要 System.Web.Script.Serialization;这在我的项目中不可用
  • 我能够解析 JavaScriptSerializer 命名空间,但是我没有定义 Person 类,因为 XML 是可变的并且可以包含未知对象但格式相同。我需要能够将 XML 转换为相同格式的 JSON。
  • @user2515186 您不需要其他序列化程序。 JSON.Net 已经可以满足您的需求。你只需要使用不同的方法。看我的回答。
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多