14

逆シリアル化するXMLファイルがあります。面白い部分は、次のコードを使用してシリアル化されたXMLファイルです。

enter code here
var serializer = new XmlSerializer(typeof(CommonMessage));
var writer = new StreamWriter("OutPut.txt");
serializer.Serialize(writer, commonMessage);
writer.Close();

そして、出力が入力と一致するかどうかを確認するために、再度逆シリアル化しようとしています。とにかくここに逆シリアル化する私のコードがあります:

var serializer = new XmlSerializer(typeof(CommonMessage));
var reader = new StringReader(InputFileName);
CommonMessage commonMessage = (CommonMessage)serializer.Deserialize(reader);
4

4 に答える 4

35

StringReaderをStreamReaderに置き換えると、正常に動作します。StringReaderは、文字列(この場合はファイル名)から値を読み取ります。

于 2011-01-18T17:03:17.383 に答える
2

同じエラーメッセージが表示されましたが、エラーソースが異なります。誰かが私のような同じ問題を抱えている場合に備えて。char文字列を分割して、xml文字列の最初の部分を切り落としました。そして、xml文字列が破損しました:

"?xml version="1.0" encoding="utf-16"?> ..." // my error
"<?xml version="1.0" encoding="utf-16"?> ..." // correct

(1,1)は、基本的に最初の行の最初の文字が正しくなく、文字列を逆シリアル化できないことを意味します。

于 2013-09-25T11:43:08.837 に答える
0

CommonMessageクラスにxmlrootとともにXmlRoot要素タグを含めます。例:[XmlRoot( "UIIVerificationResponse")]

于 2017-06-19T07:32:42.667 に答える
0

次のように、StreamWriterコンストラクターでオーダーマークを無効にする必要があります。

UTF8Encoding(false)

完全なサンプル:

        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(stream, new UTF8Encoding(false)))
        {
            xmlSerializer.Serialize(writer, objectToSerialize, ns);

            return Encoding.UTF8.GetString(stream.ToArray());
        }
于 2022-03-02T22:36:25.493 に答える