【发布时间】:2022-01-06 02:00:22
【问题描述】:
我有以下 xml 字符串格式,其中属性键是随机的且未知,但总是以字母数字字符开头
<properties>
<property key="EventId">3300</property>
<property key="source">car</property>
<property key="type">omega</property>
<property key="a341414">any value</property>
<property key="arandomstring_each_time_different">any value</property>
....
</properties>
如何实现如下格式
{
"properties":
{
"EventId": "3300",
"source": "car",
...
}
}
我尝试了以下代码的一些变体,但没有成功
XDocument doc = XDocument.Parse(string);
string jsonText = JsonConvert.SerializeXNode(doc);
var dynamic = JsonConvert.DeserializeObject<ExpandoObject>(jsonText);
输出
{
"properties":{
"property":[
{
"@key":"EventId",
"#text":"3300"
},
{
"@key":"source",
"#text":"car"
},
...
]
}
}
【问题讨论】:
-
Json.NET 的行为如 Converting between JSON and XML 中所述:单个子文本节点是直接针对元素的值,否则它们将通过 #text 访问。 因为您的 @ 987654327@ 节点有一个属性,该值在
#text属性中。但是为什么要使用 Json.NET 将XElement转换为ExpandoObject呢?为什么不直接这样做呢? dotnetfiddle.net/JzCbWd。您的 XML 是否比您的问题中显示的更通用? -
谢谢你解决了我的问题,我一直在想一些图书馆会解决问题,而不是简单的解决方案。