繁体   English   中英

C#-将XML反序列化为给定完整类名的对象

[英]C# - Deserialize XML to an Object given Full Class Name

给定我具有类的全名(作为字符串)和XML(作为字符串)的全名,将XML反序列化为类的实例的正确方法是什么? 请注意,我正在一个程序集中执行此工作,而要反序列化的业务对象在另一个引用的程序集中。

  using (StringReader strreader = new StringReader("xml of the object"))
        {
            using (XmlReader xmlreader = XmlReader.Create(strreader))
            {
                dynamic result = new XmlSerializer(Type.GetType("your type")).ReadObject(xmlreader);
            }
        }

您不需要知道类名,而是需要引用类类型。

然后,您可以像这样反序列化XML:

StringReader read = new StringReader(xmlOfAnObject);
XmlSerializer serializer = new XmlSerializer(myObject.GetType());
XmlReader reader = new XmlTextReader(read);

WhateverTheType myObject = (WhateverTheType) serializer.Deserialize(reader);

reader.Close();
read.Close();
read.Dispose();
/// <summary>
/// Deserialize string XML to the object of type T.
/// </summary>
/// <typeparam name="T">The type of the object where the xmlText are deserialized.</typeparam>
/// <param name="xmlText">The xml string to be deserialized to the object of type T.</param>
public static T DeserializeXMLToObject<T>(string xmlText)
{
    if (string.IsNullOrEmpty(xmlText)) return default(T);
    XmlSerializer xs = new XmlSerializer(typeof(T));
    using (MemoryStream memoryStream = new MemoryStream(new UnicodeEncoding().GetBytes(xmlText)))
    using (XmlTextReader xsText = new XmlTextReader(memoryStream))
    {
        xsText.Normalization = true;
        return (T)xs.Deserialize(xsText);
    }
}

您需要要反序列化的XML类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM