0

C# アプリケーションを開発していますが、xml ファイルへの入力中に問題が発生しました。最初にコードを示します。

Company comp = new Company();
comp.CompanyID = comboBox1.SelectedValue.ToString();
comp.CompanyName = comboBox1.Text;
comp.Serial = strEncryptedData;
comp.ListProduct = ll;

XmlDocument xDoc = new XmlDocument();
using (StringWriter stringWriter = new StringWriter())
{
    XmlSerializer serializer = new XmlSerializer(typeof(Company));
    serializer.Serialize(stringWriter, comp);
    xDoc.LoadXml(stringWriter.ToString());
}
string temp = xDoc.OuterXml;
MessageBox.Show(temp);
System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\test.xml");
sw.WriteLine(temp);
sw.Flush();
sw.Close();

プログラムはファイルを書き込みますが、それを xml 形式で開こうとすると、何も入っていない空白のドキュメントが表示されます。テキストエディターで開くと、次のように表示されます。

<?xml version="1.0" encoding="utf-16"?><CompanyXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><CompanyName /><CompanyID>100</CompanyID><Serial>00000G2SB4BER9PSFJİ2GTVM2UC1VYEİ</Serial></CompanyXml>

これは私が受け取った正しいデータですが、xml として開くことはできません。

どうすればフォーマットできますか?それとも、書きながら何か間違っていますか?

4

3 に答える 3

3

問題はエンコーディングにあるようで、それを修正するために削除utf-16または変更します。utf-8

エンコーディングを使用するStreamWriter コンストラクターを試して、.xml が正しいエンコーディングで保存されるかどうかを確認できます。

例えば:

StreamWriter sw = new StreamWriter(@"c:\test.xml", Encoding.UTF8);
于 2013-07-29T10:57:07.607 に答える
3

xml の最初の行からこのテキストencoding="utf-16"を削除するだけ で、xml が開きます。

于 2013-07-29T10:51:23.250 に答える
0

ただし、UTF形式の問題を指摘した後、この問題を解決する別の方法を見つけました。

まず、StringWriter を拡張するクラスを作成します。

public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding
    {
        get { return Encoding.UTF8; }
    }
}

次に、 StringWriterを変更してコードを編集します。

Company comp = new Company();
comp.CompanyID = comboBox1.SelectedValue.ToString();
comp.CompanyName = comboBox1.Text;
comp.Serial = strEncryptedData;
comp.ListProduct = ll;

XmlDocument xDoc = new XmlDocument();
using (StringWriter stringWriter = new Utf8StringWriter())
{
    XmlSerializer serializer = new XmlSerializer(typeof(Company));
    serializer.Serialize(stringWriter, comp);
    StreamWriter sw = new StreamWriter(@"c:\text.xml");
    sw.WriteLine(stringWriter);
    sw.Flush();
    sw.Close();
}

よろしく...

于 2013-07-29T11:19:39.593 に答える