简体   繁体   English

将 XML 转换为 JSON 时如何阻止 JsonConvert.SerializeObject 将整数更改为字符串

[英]How to stop JsonConvert.SerializeObject from changing ints to strings when converting XML to JSON

Is there a way to prevent Newtonsoft's JsonConvert.SerializeObject method to replace integers with strings?有没有办法阻止 Newtonsoft 的JsonConvert.SerializeObject方法用字符串替换整数? Sample code below:示例代码如下:

XmlDocument doc = new XmlDocument();
string xml = @"<data><someProperty>12345</someProperty></data>";
doc.LoadXml(xml);
string json = JsonConvert.SerializeObject(doc);

The current output is当前输出为

{"data":{"someProperty":"12345"}}

whereas the output I want is而我想要的输出是

{"data":{"someProperty":12345}}

If you override JsonTextWriter you should be able to intercept every string value, try to parse it, and write it out differently.如果您覆盖JsonTextWriter您应该能够拦截每个字符串值,尝试解析它,并以不同的方式写出它。

public class XmlIntWriter : JsonTextWriter
{
    public XmlIntWriter(TextWriter textWriter) : base(textWriter)
    {
    }
    public override void WriteValue(string value)
    {
        if (int.TryParse(value, out var i))
            this.WriteValue(i);
        else
            base.WriteValue(value);
    }
}

Using your custom writer with the Newtonsoft xml converter is a little fiddly, but should look something like;将自定义编写器与 Newtonsoft xml 转换器一起使用有点繁琐,但应该看起来像;

public static void Serialise(XDocument doc, TextWriter writer)
{
    var converter = new XmlNodeConverter ();
    var settings = new JsonSerializerSettings
    {
        Converters = new JsonConverter[] { converter }
    };
    var serializer = JsonSerializer.Create(settings);
    using var xmlWriter = new XmlIntWriter(writer);
    serializer.Serialize(xmlWriter, doc);
}

(I haven't tested any of this) (我没有测试过这些)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何防止JsonConvert.SerializeObject在字符串周围添加引号 - how to prevent JsonConvert.SerializeObject from adding quotes around strings 使用JsonConvert.SerializeObject C#时JSON结果中的问题 - Issue In JSON Result when using JsonConvert.SerializeObject C# 如何解析由JsonConvert.SerializeObject序列化的JSON - How to parse JSON which Serialize by JsonConvert.SerializeObject 使用jsonconvert.serializeobject时如何使用特定字段作为json对象的名称? - How to use a specific field as the name of a json object when using jsonconvert.serializeobject? 调用JsonConvert.SerializeObject时如何转换编码的JSON字符串属性? - How do you convert encoded JSON string properties when calling JsonConvert.SerializeObject? 尝试JsonConvert.SerializeObject时从“ ServerVersion”获取值时出错 - Error getting value from 'ServerVersion' when trying to JsonConvert.SerializeObject JsonConvert.SerializeObject 和处理空字符串 - JsonConvert.SerializeObject and handling of Empty Strings JsonConvert.SerializeObject与json_encode - JsonConvert.SerializeObject vs json_encode JsonConvert.SerializeObject(本); 在JSON中呈现函数的结果 - JsonConvert.SerializeObject(this); to render the results of a function in the JSON JsonConvert.SerializeObject()导致JSON格式错误 - JsonConvert.SerializeObject() causing JSON to be malformed
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM