Ok。シリアル化などの使用方法は知っていますが、それはシリアル化属性でマークされたオブジェクトにのみ適用されるため、たとえば、データをロードして、シリアル化を使用せずにアプリケーションで使用するにはどうすればよいですか?データファイルを言います。
または、シリアル化されていないファイルを保持するシリアル化されたデータコンテナを作成します。
私が使用した方法は、バイナリシリアル化とXMLシリアル化です。未知のデータをロードし、おそらくそれをC#で使用できる他の方法はありますか?
Ok。シリアル化などの使用方法は知っていますが、それはシリアル化属性でマークされたオブジェクトにのみ適用されるため、たとえば、データをロードして、シリアル化を使用せずにアプリケーションで使用するにはどうすればよいですか?データファイルを言います。
または、シリアル化されていないファイルを保持するシリアル化されたデータコンテナを作成します。
私が使用した方法は、バイナリシリアル化とXMLシリアル化です。未知のデータをロードし、おそらくそれをC#で使用できる他の方法はありますか?
おそらく、用語の定義は適切です。シリアライゼーションとは、「データ構造またはオブジェクトの状態を、後で同じまたは別のコンピューター環境に保存して「復元」できる形式に変換するプロセス」です。「揮発性」メモリを永続データに変換して元に戻す方法はほとんどすべて「シリアル化」であるため、独自のスキームをロールしてそれを実行しても、「シリアル化」しています。
そうは言っても、.NET バイナリ シリアル化を使用したくないだけのようです。それは実際には正しい考えです。バイナリのシリアル化は単純ですが、コードと環境に大きく依存します。シリアル化可能なクラスを別の名前空間に移動するか、Microsoft CLR を使用してファイルをシリアル化し、Mono で逆シリアル化しようとすると、バイナリのシリアル化が中断される可能性があります。
何よりもまず、ファイルに基づいて作成しようとするオブジェクトのタイプを決定できなければなりません。ファイル内でデータがどのように構造化されているかを知らずに、「ランダムな」ファイルを開いて、意味のあるものを取得できると期待することはできません。最も簡単な方法は、ファイルが作成されたオブジェクトの型名を指定することによって、ファイルがあなたに伝えることです (コードベースで利用できるようにすることをお勧めします)。ほとんどの組み込みシリアライザーは、この方法でそれを行います。ファイルがコンシューマーにその形式を通知できるその他の方法には、ファイル、行および/またはフィールド ヘッダー コード (ファイル サイズを節約するため、古い標準では非常に一般的) および拡張子/MIME タイプが含まれます。
それが整理されると、逆シリアル化が行われます。ファイルが組み込みのシリアライザーを使用してシリアライズされた場合は、単純にそれを使用しますが、それが古い形式 (CSV、固定長) の場合は、ファイルを 1 行ずつ解析して、行を表すオブジェクトに変換する必要があります。ファイルを表すメイン オブジェクト。
ETL (Extract-Transform-Load) プロセス パターンをご覧ください。これは、ファイルを取得して、プログラムが操作できるデータに変換するための、モジュラーでスケーラブルなアーキテクチャ パターンです。
JSON.NETを使用した JSON シリアル化
これは全部食べます!匿名型を含む。
編集
「シリアライゼーションを望まない」と言ったことは知っていますが、「[...]シリアライゼーション属性でマークされたオブジェクト」という声明に基づいて、JSON.NETを使用してJSONシリアライゼーションを試みなかったと思います!
昔ながらの方法は、ストリーム アクセス操作を使用して、必要なデータを読み取ることでした。このようにして、ほとんどすべてのファイルを読み書きできます。シリアル化は、何らかの契約に基づいてこのプロセスを単純に自動化します。
あなたのコメントに基づいて、あなたの要件は、そもそも契約なしであらゆる種類のファイルを読み取ることであると推測しています。
文字列の長さを指定する最初のバイトと、文字列を表す次のバイト セットを含む raw ファイルがあるとします。
例えば、5 | H | e | l | l | o
var stream = File.Open(filename);
var length = stream.ReadByte();
byte[] b = new byte[length];
stream.Read(b, 0, length);
var string = Encoding.ASCII.GetString(b);
バイナリ I/O は生のままです。 詳細については、MSDN を確認してください。