C# 复杂json 动态转换成属性格式的xml
时间: 2023-07-01 19:21:24 浏览: 94
对于复杂的JSON,可以使用递归算法将其转换为属性格式的XML。以下是一个示例代码:
```csharp
using Newtonsoft.Json.Linq;
using System.Xml.Linq;
// 将JSON字符串转换为JObject对象
string jsonStr = @"
{
'name': 'John',
'age': 30,
'address': {
'street': '123 Main St',
'city': 'New York',
'state': 'NY',
'zip': '10001'
},
'phoneNumbers': [
{
'type': 'home',
'number': '555-1234'
},
{
'type': 'work',
'number': '555-5678'
}
]
}";
JObject jsonObj = JObject.Parse(jsonStr);
// 将JObject对象转换为XElement对象
XElement xml = ConvertJObjectToXElement(jsonObj, "Person");
Console.WriteLine(xml);
private static XElement ConvertJObjectToXElement(JObject jsonObj, string elementName)
{
XElement element = new XElement(elementName);
foreach (JProperty prop in jsonObj.Properties())
{
if (prop.Value is JObject obj)
{
// 处理子对象
element.Add(ConvertJObjectToXElement(obj, prop.Name));
}
else if (prop.Value is JArray arr)
{
// 处理数组
foreach (JObject objInArr in arr)
{
element.Add(ConvertJObjectToXElement(objInArr, prop.Name));
}
}
else
{
// 处理属性
element.Add(new XAttribute(prop.Name, prop.Value));
}
}
return element;
}
```
以上代码将复杂的JSON字符串转换为JObject对象,并使用递归算法将其转换为属性格式的XML。输出结果如下:
```xml
<Person Name="John" Age="30">
<address street="123 Main St" city="New York" state="NY" zip="10001" />
<phoneNumbers type="home" number="555-1234" />
<phoneNumbers type="work" number="555-5678" />
</Person>
```
注意:上面的代码需要引用Newtonsoft.Json和System.Xml.Linq命名空间。
阅读全文