提问人:Manil 提问时间:6/7/2023 最后编辑:CharliefaceManil 更新时间:6/7/2023 访问量:318
通过在 c 中保留没有模型的数据类型,将 XML 转换为 JSON#
Convert the XML to JSON by preserving the data types without model in c#
问:
我正在尝试在不更改数据类型的情况下将 XML 转换为 JSON,但它总是返回字符串值。我尝试了不同的方法来使用适当的数据类型进行转换。 下面是我的源 XML 和预期的 JSON
<Employee >
<Name>John</Name>
<Age>18</Age>
<IsContractor>true</IsContractor>
<Salary>5555.66</Salary>
</Employee>
预期成果:
"Employee": {
"Name": "John",
"Age": 18,
"IsContractor": true,
"Salary": 5555.66
}
我尝试了不同的方法,但没有运气
string xml = @"<Employee>
<Name>John</Name>
<Age json:Type='Integer'>18</Age>
<IsContractor json:Type='Boolean'>true</IsContractor>
<Salary json:Type='Decimal'>5555.66</Salary>
</Employee>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var result = JsonConvert.SerializeXmlNode(doc);
另外,我尝试添加这样的数据类型
var xml = @"<Employee xmlns:m=""urn:informatica:ae:xquery:json2xml:meta-data"">
<Name>John</Name>
<Age m:type=""xs:double"">18</Age>
<IsContractor m:type=""xs:boolean"">true</IsContractor>
</Employee>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var result1 = JsonConvert.SerializeXmlNode(doc);
但是这两种方式都将所有值转换为字符串。
答:
-1赞
Chris Starkey
6/7/2023
#1
您可以使用利用 Newtonsoft.Json 将 XML 转换为 JSON 的解决方法,然后再次分析 JSON 以将字符串值转换为适当的数据类型。
string xml = @"<Employee>
<Name>John</Name>
<Age>18</Age>
<IsContractor>true</IsContractor>
<Salary>5555.66</Salary>
</Employee>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);
JObject json = JObject.Parse(jsonText);
// parse values to appropriate data types
json["Employee"]["Age"] = int.Parse(json["Employee"]["Age"].ToString());
json["Employee"]["IsContractor"] = bool.Parse(json["Employee"]["IsContractor"].ToString());
json["Employee"]["Salary"] = decimal.Parse(json["Employee"]["Salary"].ToString());
Console.WriteLine(json.ToString());
1赞
Serge
6/7/2023
#2
这段代码对我有用。例如,如果您有嵌套对象,则只需更改迭代算法即可
var xml = @"
<Employee >
<Name>John</Name>
<Age type='System.Int32'>18</Age>
<IsContractor type='System.Boolean'>true</IsContractor>
<Salary type='System.Double'>5555.66</Salary>
</Employee>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None, false);
var jObj = JObject.Parse(json);
foreach (JObject element in jObj.Properties().First())
{
foreach (var prop in element.Properties())
{
if (prop.Value.Type == JTokenType.Object)
prop.Value = ConvertToType((JObject)prop.Value);
}
}
json = jObj.ToString();
public JValue ConvertToType(JObject jObj)
{
var val = Convert.ChangeType(jObj["#text"], Type.GetType((string)jObj["@type"]));
return new JValue(val);
}
输出
{
"Employee": {
"Name": "John",
"Age": 18,
"IsContractor": true,
"Salary": 5555.66
}
}
评论
0赞
Manil
6/7/2023
这也对我有用。如果我们解析具有多种不同数据类型的大型 XML,这是否会导致任何性能问题
评论