1

C#でカスタム.NETシリアライザーを作成していて、XmlReaderとXmlWriterを使用して配列オブジェクトをXMLに読み書きしたいと考えています。配列をbase64エンコードしたいと思います。配列は1次元、2次元、または3次元であり、要素はブール型または数値型です。

私は完全に困惑しています。XmlReaderとXmlWriterには、Byte []配列をbase64として読み取り/書き込みするためのメソッドがありますが、配列からByte[]に行き来する方法がわかりません。

配列は大きくなる可能性があるため、配列をコピーしたり、一度に1つの要素を処理したりしないソリューションをお勧めします。安全でないコードとマネージドまたはネイティブC++は問題ありません。XMLで安全であれば、base64以外のものを使用できます。

ヘルプやヒントをありがとう。

4

4 に答える 4

1

使用している「配列」の種類に応じて、さまざまなオプションがあります。それは Array、List<>、または ArrayList ですか?

List<> の場合、CopyTo()リストの一部を取得してバイナリ配列に入れることができます。これは、XmlWriter を使用して記述できます。XmlReader から読み戻すには、単純に を使用InsertRangeしてデータを逆シリアル化します。

読み方の例:

// elsewhere
List<byte> bytes;

// in the deserialization
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize]; 
int index = 0;
int numRead = -1;

while (numRead != 0) // actually read stuff
{
    numRead = reader.ReadContentAsBase64(buffer,  bufferSize);
    if (numRead > 0)
    {
        bytes.CopyTo(buffer, index, numRead);
        index += numRead;
    }
}

注: 上記のコードはテストされていませんが、おそらく近いものです。同様のことを行うことができますが、逆に、データをエンコードして base64 に書き込むことができます。他のタイプの場合は、配列をバイトのリストに変換するだけです。

バイト配列にバイト以外の型を取得するには、を使用する必要がありますSystem.BitConverter。これには、非常に満足できる 2 つのメソッドがあります。GetBytes基本的なデータ型をバイト配列に変換するメソッドと、とToXxxを含むです。base64 情報を読み込んだ後、または書き出す前に、自分でその変換を行う責任があります。ToInt32ToBoolean

BitConverter を使用してビットごとの変換を一連のバイトに行うことができますが、配列を単一のバイト配列に変換して元に戻すためのアルゴリズムを設計するのはあなた次第です。

于 2009-03-20T18:50:20.433 に答える
0

XmlSerializer を使用する場合、byte[] 型のプロパティで DataType プロパティを「base64Binary」に設定して XmlElementAttribute を指定できます。ここを参照してください。

于 2009-06-15T15:09:58.283 に答える
0

Base-64 テキストを含む単一の XML 要素で表される単一の配列が必要な場合、おそらく最も簡単な方法は、BinaryFormatterを使用してデータ (任意の数の次元の配列、List など) をバイト配列に変換することです。次に、それを base-64 でエンコードして、XML ファイルに貼り付けます。任意の配列をバイト配列に変換する他の簡単な方法は考えられません。

于 2009-03-20T22:38:35.330 に答える