0

http://www.codeproject.com/Articles/10429/Convert-XML-data-to-object-and-back-using-serializをアドバイスの基礎として使用してオブジェクトをシリアル化し、XMLを取得しました。XMLを2008データベースのテキストフィールドに保存しました。デシリアライズすると、InvalidOperationExceptionが発生します。オブジェクトを逆シリアル化し、そもそもシリアル化が不十分であることがわかった経験はありますか?

public static Request ToObject(string xml)
    {
        StringReader stream = null;
        XmlTextReader reader = null;
        try
        {
            // serialise to object
            XmlSerializer serializer = new XmlSerializer(typeof(Request));
            stream = new StringReader(xml); // read xml data
            reader = new XmlTextReader(stream);  // create reader
            // covert reader to object
            return (Request)serializer.Deserialize(reader);
        }
        catch
        {
            return null;
        }
        finally
        {
            if (stream != null) stream.Close();
            if (reader != null) reader.Close();
        }
    }

    public static string ToXML(Request oRequest)
    {
        MemoryStream stream = null;
        TextWriter writer = null;
        try
        {
            stream = new MemoryStream(); // read xml in memory
            writer = new StreamWriter(stream, Encoding.Unicode);
            // get serialise object
            XmlSerializer serializer = new XmlSerializer(typeof(Request));
            serializer.Serialize(writer, oRequest); // read object
            int count = (int)stream.Length; // saves object in memory stream
            byte[] arr = new byte[count];
            stream.Seek(0, SeekOrigin.Begin);
            // copy stream contents in byte array
            stream.Read(arr, 0, count);
            UnicodeEncoding utf = new UnicodeEncoding(); // convert byte array to string
            return utf.GetString(arr).Trim();
        }
        catch
        {
            return string.Empty;
        }
        finally
        {
            if (stream != null) stream.Close();
            if (writer != null) writer.Close();
        }
    }
4

1 に答える 1

1

これはあなたの質問に答えるはずです。

つまり、Unicode を使用してシリアル化していますが、逆シリアル化はしていません。

だからあなたの修正は - ToObject メソッドで、次のように変更します。

MemoryStream stream;
stream = new MemoryStream(Encoding.Unicode.GetBytes(xml));
于 2012-06-26T16:30:06.723 に答える