問題タブ [binaryformatter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ProgressBar に表示するためのシリアル化時間を計算または取得する方法はありますか?
私は C# .net 4.0 を使用していますが、それを行う方法がわかりませんが、ご存知でしょうか? :)
私はその方法でシリアライゼーションを行います:
c# - 一時的な逆シリアル化データを保存するのに最適な場所はどこですか?
デシリアライズ/シリアライズにのみ必要なデータを格納するためにクラスにフィールドを追加することを回避できますか?
私がいくつかのクラスを持っているとしましょう:
serializableTemporaryData
の各オブジェクトにフィールドが含まれないようにする方法はありMyClass
ますか?たとえば、静的にすることはできますか(おそらく、On ...メソッドを変更することによって)?
制約:の実装を変更することはできませんNonSerializableDataType
。
例:myFieldにリソースへのハンドルが含まれているとします。次に、シリアル化の際に、逆シリアル化後にリソースを取得する方法に関する情報を保存する必要がありますが、ハンドル自体を保存することはできません。ハンドルを別のクラスにラップすると、問題がラッパークラスに移されただけです。その場合、ラッパークラスについてもまったく同じ質問をします。
c# - BinaryFormatter Serialize は異なる結果を生成します
私のアプリケーションの認証コード内で、FormsAuthentication
最も複雑な部分を処理するために使用して、アプリケーションを実行している特定のマシンの環境問題の原因を BinaryFormatter に絞り込みました。
On some machines the auth process completes properly and my users are logged in. On others, however, the BinaryFormatter
produces separate results from the same inputs (virtually identical, unless I'm missing something), thus breaking the auth process and users can never log in.
In the correct environment, it produces a serialized string with a length of about 373. In the bad environment, the serialized string produced is 5,024. Herein lies the problem.
Here's how the code is being run:
This in turn mucks up the rest of the authentication process, because it essentially creates a cookie with about 40,000+ bytes of data, which never creates a cookie (needs to be 4,096 bytes or less to be accepted by the browser).
My question, and it's not easily testable (tell me about it) - what could be different between the two machines to cause serialization differences? Both are being developed on Windows 7 in Visual Studio and running on the built-in Cassini server, but are there other common gotchas that would make Serialize
return such vastly different results?
c# - オブジェクトをデシリアライズしようとするとプログラムがハングする
Windows ベースのチャット アプリケーションを開発しています。クライアントが最初に Command クラスを送信すると、サーバーはそれを処理し、別の Command クラスを送信してクライアントに確認応答します。
(プログラムの流れがわかるように、コード セグメントに番号を付けました)
サーバーが確認を送り返すまで、すべてがうまくいきます。クライアント (5.) でコードを実行して、逆シリアル化して確認応答のコピーを取得すると、クライアント プログラムが応答しなくなります。しかし、サーバーのコード (6.) は機能しているようです。コマンドを正常にシリアル化します。
誰かがここで何が悪いのか指摘できますか?
前もって感謝します。
サーバーコード:
クライアントコード:
.net - オブジェクト(メンバーを含む:Dictionary、List ...など)をMonoでシリアル化し、MS.NETで逆シリアル化することはできますか、またはその逆はprotobuf-netを使用して行うことができますか?
サーバーがMS.NETで実行され、クライアントがMono(これはUnity3Dエンジンです)で実行されており、BinaryFormatter()を実行しようとすると、次のようにオブジェクトを逆シリアル化します。
クライアント側がタイプを検出/ロードできません:ディクショナリ、リスト... MS.NETで実行されているのと同じ「クライアントコード」が正常に機能します。つまり、逆シリアル化中に例外が発生しません。
http://www.mono-project.com/FAQ:_Technical#Compatibilityから読んだように、これは一般的な問題です。
「独自のクラスをシリアル化する場合は、シリアル化に使用されるアセンブリとクラスを制御できるため、問題はありません。ただし、フレームワークからオブジェクトをシリアル化する場合は、内部構造がこれらのオブジェクトは異なる場合があります。この互換性は、異なるMS.NETバージョンまたはMonoバージョン間でも保証されません。」
ProtoBuf-Netは、このシリアル化/逆シリアル化の問題を回避/解決するのに役立ちますか?
c# - 逆シリアル化プロセスへのフック
DateRange
以下に示すように、静的参照を介して無限の概念を表すオブジェクトがあります。ご覧のとおり、Infinity を定義するエンド ポイントは、別のクラスの静的参照でもDatePoint.Past
ありDatePoint.Future
ます。
ここで、これをシリアライズし (シリアライゼーションを使用するディープ Clone メソッドの一部として)、エンドポイントを持つインスタンスがデシリアライズされるタイミングを知る必要がありますDateTime.Min
DateTime.Max
DateRange.Infinity
。だから私はそれを作る必要があると思いますISerializable
。
私の最初の実装の試みISerializable
はかなり貧弱です。しかし、私はそれが誰かにとってより迅速な修正を示唆することを期待してそれを示しています. NHibernate が db に格納して Infinity を再構成するためにいくつかの同様のコードを使用しDateRange
ましたが、それをシリアル化に適用する方法はまだわかりません。
DatePoint
はマークされ[Serializable]
ていますが、実装していませんISerializable
。
編集された質問
インフィニティをシリアライズ/デシリアライズするつもりはありません。私が探しているのは、逆シリアル化されたものを取り、DataRange
それが と同等かどうかを判断できる場所へのフックInfinity
です。
**
乾杯、ベリル
日付範囲
日付ポイント
最初の ISerializable 試行
c# - クラスを値なしでバイト配列に変換すると、使用可能な 256 バイトのうち 220 バイトが既に含まれています
現在、クラスUsageData
をバイト配列に保存し、ハードウェア キーに保存する作業を行っています。このハードウェア キーには、ユーザー データ用に最大 256 バイトが予約されています。現在、プロパティで満たされたクラスのサイズは約 640 バイトで、既に圧縮されています。UsageDataTemp
ここで、プロパティ/フィールドなしで一時的なクラスを作成しました。バイト配列が値なしでどれだけ大きいかを確認するテストを実行すると、すでに 220 バイトのサイズがあり、あと 36 バイトしか残っていません。
値のない空のクラスが、それ自体を保存するためにすでに 220 バイトを必要とするのはなぜですか。また、バイト配列をさらに圧縮する方法はありますか。それとも、自分で作成を開始する必要がありますかBinaryFormatter
。
c# - BinaryFormatterの入力をサニタイズする
.NETを使用してBinaryFormatter
、Convert.ToBase64String
カスタムオブジェクトをシリアル化<input>
し、Webページの非表示タグに格納しています。
ユーザーがフォームを送信したら、手順を逆にしてカスタムオブジェクトを逆シリアル化します。
ギャップのあるセキュリティホール:ユーザーがインスタンスを巧みにシリアル化MyMaliciousType
してbase-64文字列に変換し、それをWebフォームに投稿するとどうなるでしょうか。
デシリアライズを実際に実行する前に、デシリアライズされるタイプが特定のタイプと一致するかどうかを確認する方法はありますか?
c# - .NET Remoting、なぜリストはリモータブルではないのですか?
私は、同じコンピューター上にある2つの単純なプログラム間にリモートチャネルを確立するためにを使用RemotingServices.Marshal
しています。Activator.GetObject
number
両方のプログラムが正常に変更さtext
れ、完全に一意の値に変更されているため、チャネルが存在し、通信が可能であることを確認しました(確認済み)。
だから私はすぐに同じことをしようとしましたstrings
。
あるプログラムで、私はに電話しstrings.Add("1")
ました。strings
2番目のプログラムの内容を読んでみました。空でした。さらに、カウントはでした0
。オブジェクトを追加しなかったかのように、なぜオブジェクトstrings
が継続するのかわかりません。0
同じことがaStack<T>
とDictionary<T, K>
、にも起こります。要素を追加することはできません。一般に参照型で何か奇妙なことが起こっていないことを確認するためStringBuilder
に、IPCインターフェイスクラスにを入れてみました。その「状態」は、値を変更する両方のプログラムで正常に維持されました。
質問:文字列のリストが追加されないのはなぜですか、そして解決策は何ですか?
経験のある人がこの問題をすぐに見つけられることを願っています。同様の質問でグーグルを試しましたが、有用な結果は得られませんでした。驚いたことに、「. netremotingtransparentproxyのデバッグ」をグーグルで検索するための適切なリンクは1つしかありませんでした。それも私が持っている2番目の質問です。透過プロキシオブジェクトをデバッグするにはどうすればよいですか?
- すべてのオブジェクトは適切にインスタンス化されます(NullReferenceExceptionはありません。実際、例外はありません)。
visual-studio - ストリームからの複数のタイプの逆シリアル化
私はカードゲームプログラムを持っていますが、これまでのところ、チャットはホストとクライアントの間のTCPClientストリームを介してうまく機能します。ホストとクライアント間でカードを渡すこともできるように、シリアル化と逆シリアル化を使用してこれを実行したいと思います。カードを渡すために別のTCPClientストリームを作成しようとしましたが、機能せず、テキストメッセージとカードを取得する1つのTCPClientストリームを保持する方が簡単であると考えました。そこで、シリアルと呼ばれるクラスを作成しました。このクラスには、カードのプロパティがあり、もう一方の端にあるカードの埋め込みデータベースからカードを再構築するのに役立ちます。カードがストリームに入れられたかどうか、またはカードがストリームに入れられたかどうかをプログラムに認識させる方法はありますか?ストリーム内のテキストだけなので、文字列またはシリアルに適切に逆シリアル化できますか?または、シリアルクラスに文字列プロパティを追加する必要があります。シリアルに逆シリアル化した後にそのプロパティが入力されると、それは単なるテキストであることがわかります(逆シリアル化後にそのフィールドが空の場合は、カードであることがわかります)。文字列に逆シリアル化しようとするtrycatchを考えています。失敗した場合は、キャッチしてシリアルとしてキャストします。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。それが失敗した場合、それは穀物として捕らえられ、投げられます。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。それが失敗した場合、それは穀物として捕らえられ、投げられます。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。