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