我有一个REST服务返回包含int
列表的序列化对象的XML。目标代码是下面反序列化包含int列表的对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace All.Tms.Dto
{
[XmlRoot(Namespace = "http://schemas.datacontract.org/2004/07/All.Tms.Dto")]
public class ReadSensorsForVehicleIdResponse
{
public List<int> sensorIdList { get; set; }
}
}
当该对象被序列生成并发送作为XML:
<ReadSensorsForVehicleIdResponse xmlns="http://schemas.datacontract.org/2004/07/All.Tms.Dto" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><sensorIdList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><a:int>107</a:int></sensorIdList></ReadSensorsForVehicleIdResponse>
的问题是,整型值被序列化为
<a:int>107</a:int>
这会导致对象的反序列化失败。当我改变
<a:int>107</a:int>
到
<int>107</int>
对象反序列化正确。是否有任何理由为什么int
值以这种方式序列化,我该如何解决这个问题?
下面是我用它来反序列化
public static T Deserialize<T>(string xml) where T : class
{
var serializer = new XmlSerializer(typeof(T));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
var reader = XmlReader.Create(stream);
return (T)serializer.Deserialize(reader);
}
我在上面的问题中添加了用于反序列化的代码。此代码在整个项目中都会使用,并且需要付出很大的努力才能使用您建议的方法将我的对象更改为反序列化。 – user65439
我实现了你建议的解决方案,反序列化我遇到麻烦的对象。感谢您的建议。 +1 – user65439