为了账号安全,请及时绑定邮箱和手机立即绑定

将XmlDocument的一部分反序列化为对象

将XmlDocument的一部分反序列化为对象

C#
jeck猫 2021-04-08 14:15:00
我经常看到这个问题,但似乎没有人的头衔确实能形容他们的问题。我从包含常规响应信息以及要反序列化的数据对象的Web API中获得了一个较大的响应对象。我只想反序列化modelData元素。modelData对象类型是动态的,具体取决于API调用。我在其他应用程序中反序列化xml,并创建了以下方法,但不知道如何专门仅获取modelData元素:    public static T ConvertXmltoClass<T>(HttpResponseMessage http, string elementName) where T : new()    {        var newClass = new T();        try        {            var doc = JsonConvert.DeserializeXmlNode(http.Content.ReadAsStringAsync().Result, "root");            XmlReader reader = new XmlNodeReader(doc);            reader.ReadToFollowing(elementName);            //The xml needs to show the proper object name            var xml = reader.ReadOuterXml().Replace(elementName, newClass.GetType().Name);            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))            {                var serializer = new XmlSerializer(typeof(T));                newClass = (T)serializer.Deserialize(stream);            }        }        catch (Exception e)        {            AppLog.LogException(System.Reflection.MethodBase.GetCurrentMethod().Name, e);        }        return newClass;    }我已多次更新此线程,以保持最新状态。我开始使用第一个解决方案进行更新。但是,该解决方案本身并不能解决问题。有了现在的代码,我没有异常,但没有将xml反序列化到我的对象中。相反,我得到了一个新的空白对象。有什么想法吗?对象类型可以更改,这是我正在处理的当前对象:(请注意,我在Web API中反序列化了modelData中的确切xml)namespace WebApiCommon.DataObjects{    [Serializable]    public class ReportXDto    {        public ReportXDto()        {            Parameters = new List<ReportParameterXDto>();        }        public int Id { get; set; }        public string ReportTitle { get; set; }        public bool HasParameters { get; set; } = false;        public List<ReportParameterXDto> Parameters { get; set; }        public string SourceSql { get; set; }        public DataTable Report { get; set; }    }
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信