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

我经常看到这个问题,但似乎没有人的头衔确实能形容他们的问题。我从包含常规响应信息以及要反序列化的数据对象的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; }

    }



jeck猫
浏览 182回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP