[英]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.