Serializing และ Deserializing ต้นไม้นิพจน์ใน C #


92

มีวิธี Deserialize Expressions ใน C # หรือไม่ฉันต้องการจัดเก็บ Expressions ในฐานข้อมูลและโหลดในขณะทำงาน


สำนวนแบบไหน? Regex?
Jon Limjap

16
ฉันจะถือว่านิพจน์ประเภท System.Linq.Expression กำหนดให้เป็น "ต้นไม้"
David Wengier

1
คุณสามารถใช้codeproject.com/Articles/851187/…
Mohammad Dayyan

คำตอบ:


48

ฉันยังคงทำงานในไลบรารีที่กล่าวถึงโดยSerializing และ Deserializing Expression Trees ใน C #

ดูเหมือนว่าโครงการจะถูกยกเลิก (2008) แต่ฉันได้ทำงานกับมันและตอนนี้มันใช้งานได้กับ. NET 4.0 และ Silverlight ฉันได้ทำการแก้ไขข้อบกพร่องของโค้ดของพวกเขาและทำให้มันเป็นอิสระจาก DAL มากขึ้น

http://expressiontree.codeplex.com/


2
+1 เพื่อหาโซลูชันที่ใช้งานได้ ฉันลองใช้ไลบรารีดั้งเดิมบน MSDN และไม่สามารถยกเลิกการกำหนดค่าเริ่มต้นของโหนดนิพจน์ไบนารีแบบธรรมดาได้ โครงการของคุณทำงานได้ดี ขอบคุณ!
Jacobs Data Solutions

2
เป็นโครงการใน Nuget หรือไม่?
Mohammad Dayyan

@MohammadDayyan Microsoft ไม่เด็ดขาดและไม่สอดคล้องกับเครื่องมือการจัดการแพคเกจ บางครั้งแพคเกจ ASP.NET CORE สามารถติดตั้งกับ Nuget ได้ในกรณีอื่น ๆ เช่นไดรเวอร์ MongoDB จะไม่พร้อมใช้งานผ่าน NuGet อย่างน้อย Microsoft ก็มีข้อมูลเชิงลึกที่อนุญาตให้ NPM จัดการแพ็คเกจได้ มีแนวโน้มที่จะใส่สิ่งนี้ใน NPM
T. Webster

@RepoMan การแก้ปัญหามีค่ามากกว่าสำหรับฉันเมื่อช่วยใครสักคน บางทีคุณอาจจะสามารถนำเอกสารบางอย่างเกี่ยวกับการใช้งาน - การพูดคุยให้ของ ..
T. เว็บสเตอร์

14

ตัวเลือกอื่น ๆ คือโครงการExpression Tree Serializationบน code.msdn.com - จะมีอะไรมากกว่าที่ต้องการที่นี่?

UPD: ตอนนี้http://archive.msdn.microsoft.com/exprserialization


Expression Tree Serialization code ถูกลบออกจาก code gallery code.msdn.microsoft.com/exprserializationมีแนวคิดใดที่จะย้ายไปที่หรือทางเลือกอื่นที่ดีกว่า
Kiran Bheemarti

@ คิรัน: หมายความว่าไง? การดาวน์โหลดโค้ดยังคงอยู่ที่นั่น ตรวจสอบแท็บดาวน์โหลดที่ด้านบนสุดของหน้า
Robert Harvey

ใช่ตอนนี้อาจเป็นสิ่งชั่วคราวหน้านี้กำลังส่งโครงการไม่พบข้อผิดพลาดเมื่อวานนี้เมื่อฉันลองลิงก์ด้านบน ฉันเห็นโครงการและดาวน์โหลดเดี๋ยวนี้ ขอบคุณ !!!
Kiran Bheemarti

13

มีโครงการเกี่ยวกับ GitHub / Nuget ที่เรียกว่าMetaLinqซึ่งมีจุดมุ่งหมายเพื่อให้การทำงานกับการแสดงออกเป็นเรื่องง่ายขึ้น

มันแปลงระหว่างนิพจน์ปกติและ 'EditableExpressions' ซึ่งเปลี่ยนแปลงได้และเป็นอนุกรมได้อย่างสมบูรณ์ดังนั้นจึงสามารถใช้กับ Json, Xml, Binary เป็นต้น

ตรวจสอบโพสต์บล็อกนี้สำหรับข้อมูลเพิ่มเติม


12

มีลักษณะที่ห้องสมุดใหม่ของฉันSerialize.Linq มันทำให้นิพจน์ linq เป็นอนุกรมเป็น json, xml และ binary


คุณเคยใช้สิ่งนี้มาก่อนหรือไม่? ประสบการณ์ของคุณเป็นอย่างไร / พบข้อ จำกัด ใด ๆ ?
Alexandre Brisebois

ฉันใช้เวอร์ชันที่คล้ายกันในโครงการล่าสุดของฉัน ทำงานได้ดี
esskar

ทำไมคุณถึงเขียนบางสิ่งที่ทำให้เส้นแบ่งระหว่างชั้นแย่ลง? คุณกำลังส่งเสริมการเปิดเผยอ็อบเจ็กต์โดเมน DAL ไปยัง BAL ... เว้นแต่ว่าไลบรารีของคุณจะแปลง DTO โดยอัตโนมัติ (และแบบสอบถามเทียบกับวัตถุเหล่านั้น) เป็นอ็อบเจ็กต์ / คิวรีของโดเมน ฉันไม่เห็นสิ่งใดในเอกสารที่ระบุพฤติกรรมดังกล่าว
M.Babcock

@ M.Babcock: สิ่งที่คุณต้องการใช้ในนิพจน์ DTO vs Entities ไม่ได้เป็นส่วนหนึ่งของตรรกะของไลบรารี
esskar

4
@esskar บล็อก / ไซต์ทั้งหมดของคุณดูเหมือนจะหายไป มันย้ายไปแล้ว?
จอน

3

ไม่เต็ม; อย่างไรก็ตามตัวอย่างDynamic LINQอาจช่วยได้เล็กน้อย คุณสามารถทำให้นิพจน์เป็นอนุกรมเป็นสตริงได้อย่างแน่นอน (ในระดับหนึ่ง - ยาสามัญดูน่าเบื่อไปหน่อย) แต่ไม่มีตัวแยกวิเคราะห์แบบ inbuilt


ฉันไม่สามารถหาวิธีจัดลำดับนิพจน์เป็นสตริงโดยใช้ตัวอย่างเพียงทิศทางอื่นเพื่อใช้เป็นสตริงและสร้างโครงสร้างนิพจน์ ฉันจะเรียกวิธีใด?
Christopher Edwards


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.