从 XML 转换后,如何在 JSON 中获取不带引号的数值

Posted

技术标签:

【中文标题】从 XML 转换后,如何在 JSON 中获取不带引号的数值【英文标题】:How can I get numeric values without quotes in JSON after converting from XML 【发布时间】:2018-12-25 06:35:02 【问题描述】:

我有一个来自 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>

有没有办法在不为每个字段创建类型的情况下做到这一点?

谢谢。

【问题讨论】:

我认为它不知道里面是什么数据类型,所以它将所有内容都视为字符串,因为这是最安全的数据。我查看了 Parse() 的设置选项,但没有运气。总是有一个选项可以覆盖 Parse() 或使用更改的代码实现您所说的解析,以测试是否可以将某些内容解析为数字,然后将其保存为这样:/ 【参考方案1】:

有点乱,但您可以编写自己的 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;

【讨论】:

以上是关于从 XML 转换后,如何在 JSON 中获取不带引号的数值的主要内容,如果未能解决你的问题,请参考以下文章

反序列化后无法获取从xml文件返回的项目列表

c#一个程序把xml文件转化成json对象,怎么从这个程序中获取json对象的值

如何从异步函数中获取数组的所有值

XSLT 3.0 - 无法在 XSLT 3.0 xml-to-json() 中获取对象数组

如何将 JSON 数据转换为 XML 格式数据并在 React JS 中下载文件

无法反序列化 JSON 响应