c# - 从 XML 转换后,如何在 JSON 中获取不带引号的数值
问题描述
我有一个来自 SQL Server 中存储过程的 XML,这个 XML 被转换为 JSON,然后从 Web API 方法返回。
这就是我将 XML 转换为 JSON 的方式
XmlDocument doc = new XmlDocument();
doc.LoadXml(reportXmlString);
string jString = JsonConvert.SerializeXmlNode(doc);
JObject jObject = JObject.Parse(jString);
return jObject;
我想将 JSON 中的数值作为数字......不带引号
我现在拥有的
{
"Report": {
"ReportItem": [
{
"Name": "MyObjectName",
"Revenue": "99999.45"
}
]
}
}
我想拥有的
{
"Report": {
"ReportItem": [
{
"Name": "MyObjectName",
"Revenue": 99999.45
}
]
}
}
我没有这个 XML 的任何类,我没有将它映射到任何地方,我只是从存储过程接收 XML,将其转换为 JSON 并将其返回给用户。
这是我正在解析为 JSON 的 XML
<Report xmlns:json="http://james.newtonking.com/projects/json">
<ReportItem>
<Name>MyObjectName</Name>
<Revenue>99999.45</Revenue>
</ReportItem>
</Report>
有没有办法在不为每个字段创建具有类型的类的情况下做到这一点?
谢谢。
解决方案
有点乱,但您可以编写自己的 JsonConverter (如果它们也以字符串形式出现,这不会修复所写的布尔值):
class NumberConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (Double.TryParse(value.ToString(), out var d))
{
writer.WriteValue(d);
}
else
{
writer.WriteValue(value.ToString());
}
}
public override bool CanRead => false;
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后像这样使用它:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
string jString = JsonConvert.SerializeXmlNode(doc);
JObject jObject = JObject.Parse(jString);
var fixedString = JsonConvert.SerializeObject(jObject, new NumberConverter());
var fixedObject = JObject.Parse(fixedString);
return fixedObject;
推荐阅读
- opencv - 设置用于图像捕获和图像处理的场景
- python-3.x - 服务器(Ubuntu 16.04)在运行 LSTM 时冻结并停止响应
- rust - 语法是什么:`instance.method::
()`? - c# - 无法将属性或索引器“AuthenticationHeaderValue.Parameter”分配给 - 它是只读的
- kubernetes - GKE Ingress - 简单的 nginx 示例但出现错误“找不到后端的节点端口”
- c++ - 如何防止vector改变内存地址
- python - Django 和 ElasticBeanstalk:内部服务器错误,HTTP/2 协议将处于非活动状态
- javascript - 在 Javascript 书签中设置下拉值,我的代码仅适用于文本字段
- asp.net-mvc - Fitbit.Net 2.2 活动日志
- python - super() 什么时候需要参数才能正常工作?