C#での式ツリーのシリアル化と逆シリアル化


92

C#で式を逆シリアル化する方法はありますか。式をデータベースに格納し、実行時にそれらをロードします。


どんな表情?正規表現?
Jon Limjap、2008年

16
「ツリー」を考えると、System.Linq.Expressionタイプの式を想定しています。
David Wengier、2008年

回答:


48

C#での式ツリーのシリアル化と逆シリアル化で言及されたライブラリの作業を続けました

プロジェクトは放棄されたようですが(2008)、私はいくつかの作業を行いましたが、現在は.NET 4.0およびSilverlightで動作します。私は彼らのコードにバグ修正を加え、それをさらにDAL非依存にしました。

http://expressiontree.codeplex.com/


2
実用的なソリューションを考え出すための+1。MSDNの元のライブラリを使用してみましたが、単純なバイナリ式ノードを逆シリアル化できませんでした。プロジェクトはうまくいきます。ありがとう!
Jacobs Data Solutions

2
Nugetのプロジェクトですか?
Mohammad Dayyan 2013年

@ MohammadDayyan、Microsoftは、そのパッケージ管理ツールに関して、優柔不断で一貫性がありません。場合によっては、ASP.NET COREパッケージをNugetと共にインストールできます。たとえば、MongoDBドライバーがNuGet経由で利用できない場合もあります。それでも、少なくともMicrosoftには、NPMがパッケージを管理できるようにする洞察がありました。これをNPMに置く可能性が高い
T. Webster

問題を解決する@RepoManは、誰かを助けるときに私にとってはるかに価値があります。多分あなたは使用法に関するいくつかのドキュメントを提供することができます
T. Webster

14

他のオプションは、code.msdn.comのExpression Tree Serializationプロジェクトです-ここで必要なものはもっとあるように見えますか?

UPD:http : //archive.msdn.microsoft.com/exprserialization


式ツリーのシリアル化コードがコードギャラリーcode.msdn.microsoft.com/exprserializationから削除されました。コードがどこに移動するか、より優れた代替案はありますか?
キランビーマルティ

@吉蘭:どういう意味ですか。コードのダウンロードはまだ残っています。ページ上部のダウンロードタブを確認してください。
Robert Harvey、

はい、今のところ、おそらく一時的なものです。上のリンクを試したところ、昨日、ページでプロジェクトが見つかりませんというエラーがスローされていました。私はプロジェクトを見て、今すぐダウンロードします。ありがとう!!!
キランビーマルティ

13

GitHub / NugetにMetaLinqと呼ばれるプロジェクトがあり、これは式の束をより簡単に扱うことを目的としています。

通常の式と、変更可能で完全にシリアル化可能な「EditableExpressions」との間で変換されるため、Json、Xml、Binaryなどで使用できます。

詳細については、このブログ投稿も確認してください。


12

私の新しいライブラリSerialize.Linqを見てください。linq式をjson、xml、およびバイナリにシリアル化します。


これを以前に使用したことがありますか?あなたの経験はどうでしたか/制限を見つけましたか?
Alexandre Brisebois 2012

私は最後のプロジェクトで同様のバージョンを使用しました。うまくいきます。
esskar 2012

なぜ階層間の境界線を悪化させる何かを書くのですか?ライブラリが何らかの方法でDTO(およびそれらに対するクエリ)をドメインオブジェクト/クエリに自動的に変換しない限り、DALドメインオブジェクトのBALへの公開を促進しています。ドキュメントにそのような動作を示すものは何もありません。
M.バブコック

@ M.Babcock:式で使用したいものDTO vs Entitiesは、ライブラリのロジックの一部ではありません。
esskar

4
@esskarあなたのブログ/サイト全体がなくなっているようです。動いた?
Jon

3

完全ではありません。ただし、動的LINQサンプルが少し役立つ場合があります。確かに、式を文字列にシリアル化できます(ある程度-ジェネリックは少し厄介に見えます)が、組み込みのパーサーはありません。


文字列として受け取り、式ツリーを作成するために、サンプルを使用して式を文字列にシリアル化する方法を見つけることができません。どのメソッドを呼び出しますか?
クリストファーエドワーズ


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.