【问题标题】:Generation of dynamic class from XML to JSON生成从 XML 到 JSON 的动态类
【发布时间】:2016-05-03 13:47:43
【问题描述】:

我想要实现的是将 XML 转换为 JSON 对象。目前我正在这样做:

Public Class Person
    Public Property Name As String
    ' other properties here'
End Class

Dim doc As XmlDocument
doc.LoadXml(arg_strXml)
Dim jsonValue As String = JsonConvert.SerializeXmlNode(doc)
Dim jsonObject = JsonConvert.DeserializeObject(Of Person)(jsonValue)

Dim firstName As String = jsonObject.Name

但是问题在于检索到的 XML,因此反序列化的 JSON 对象具有不同的字段/属性/元素,具体取决于正确的函数。为每个可能的 XML 创建一个类将是一场噩梦。

有没有办法不必为每个反序列化创建一个特定的类(在这种情况下为 Person)?

【问题讨论】:

  • 是的。解析它而不是反序列化它。
  • 只是出于好奇,为什么要将其转换为 JSON 而不是仅使用 XML? LINQ to XML 在 VB.NET 中相当不错。
  • 主要是为了性能,在我们使用GetPropertyValue(Of String)("NodeName")之前。 Linq to XML 有什么帮助?
  • 试试这个Dim doc As XmlDocument = new XmlDocument() doc.LoadXml(arg_strXml) Dim jsonValue As String = JsonConvert.SerializeObject(doc)
  • Hackerman 如何在您的示例中从 jsonValue 获取值/属性?

标签: json xml vb.net json.net


【解决方案1】:

您可以将 JSON 字符串反序列化/解析为 Newtonsoft 的 JObject。然后就可以访问Dictionary(Of String, String)之类的属性了,例如:

Dim arg_strXml = "<Person><Name>foo</Name></Person>"
Dim doc = New XmlDocument()
doc.LoadXml(arg_strXml)
Dim jsonValue = JsonConvert.SerializeXmlNode(doc)
Dim jsonObject = JObject.Parse(jsonValue)
Console.WriteLine(jsonObject("Person")("Name"))

dotnetfiddle demo

输出:

foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2013-03-11
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多