2016-01-26 3 views
1

То, что я пытаюсь достичь, - преобразовать XML в объект JSON. В настоящее время я делаю это так:Генерация динамического класса от 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 в этом случае) для каждого десериализации?

+0

Да. Разбирайте его, а не десериализуйте. – Plutonix

+0

Просто из любопытства, почему вы хотите преобразовать его в JSON вместо того, чтобы просто использовать XML? LINQ to XML довольно хорош в VB.NET. – Mark

+0

Главным образом для производительности, прежде чем мы использовали GetPropertyValue (Of String) («NodeName»). Как Linq to XML поможет? – andrewb

ответ

0

Вы можете deserialze/parse строку JSON в Newtonsoft's 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 
Смежные вопросы