0

クラスの完全な名前 (文字列として) と XML (文字列として) がある場合、XML をクラスのインスタンスに逆シリアル化する適切な方法は何ですか? 1 つの注意点として、私はこの作業を 1 つのアセンブリで行っており、逆シリアル化したいビジネス オブジェクトは別の参照アセンブリにあります。

4

3 に答える 3

2
  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);
            }
        }
于 2012-04-17T13:43:15.270 に答える
1
/// <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 の型が必要です。

于 2012-04-19T03:15:42.597 に答える
1

クラス名を知る必要はありませんが、クラス タイプへの参照が必要です。

次に、次のように 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();
于 2012-04-17T13:38:59.540 に答える