C #에서 식 트리 직렬화 및 역 직렬화


92

C #에서 식을 역 직렬화하는 방법이 있습니까? 식을 데이터베이스에 저장하고 런타임에로드하고 싶습니다.


어떤 표현? 정규식?
Jon Limjap

16
"트리"가 주어지면 System.Linq.Expression 유형 표현식을 가정합니다.
David Wengier

답변:


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과 함께 설치할 수 있습니다. 다른 경우에는 NuGet을 통해 MongoDB 드라이버를 사용할 수 없습니다. 여전히 최소한 Microsoft는 NPM이 패키지를 관리 할 수있는 통찰력을 가지고있었습니다. NPM에 넣어 더 많은 것
T. 웹스터

@RepoMan이 문제를 해결하는 것은 누군가를 도울 때 나에게 훨씬 더 가치가 있습니다. 아마 당신은 사용에 대한 몇 가지 문서를 기여할 수 -하자 이야기를 ...
T. 웹스터

14

다른 옵션은 code.msdn.com 의 Expression Tree Serialization 프로젝트입니다. 여기에 필요한 것이 더 많아 보일까요?

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


표현 트리 직렬화 코드는 코드 갤러리에서 제거 code.msdn.microsoft.com/exprserialization , 그것은 또는 더 나은 대안 이동 어떤 생각을?
Kiran Bheemarti

@Kiran : 무슨 뜻이야? 코드 다운로드는 여전히 존재합니다. 페이지 상단의 다운로드 탭을 확인하세요.
Robert Harvey

예, 아마도 일시적인 것입니다. 어제 위의 링크를 시도했을 때 페이지에서 프로젝트를 찾을 수 없음 오류가 발생했습니다. 프로젝트를보고 지금 다운로드합니다. 감사!!!
Kiran Bheemarti

13

GitHub / Nuget에는 MetaLinq 라는 프로젝트가 있습니다.이 프로젝트 는 표현식 트레스 작업을보다 쉽게 ​​만드는 것을 목표로합니다.

일반 표현식과 변경 가능하고 완전히 직렬화 가능한 'EditableExpressions'사이에서 변환되므로 Json, Xml, Binary 등과 함께 사용할 수 있습니다.

이것도 확인 자세한 내용은 블로그 게시물 을 .


12

내 새 라이브러리 Serialize.Linq를 살펴보십시오 . linq 표현식을 json, xml 및 바이너리로 직렬화합니다.


이거 전에 사용 해본 적이 있나요? 당신의 경험은 어땠습니까?
Alexandre Brisebois 2012 년

지난 프로젝트에서 비슷한 버전을 사용했습니다. 잘 작동합니다.
esskar

왜 계층 사이의 경계를 더 악화시키는 것을 작성하겠습니까? 라이브러리가 DTO (및 이에 대한 쿼리)를 도메인 개체 / 쿼리로 자동 변환하지 않는 한 BAL에 대한 DAL 도메인 개체의 노출을 촉진합니다. 나는 문서에서 그러한 행동을 나타내는 어떤 것도 보지 못했습니다.
M.Babcock 2012

@ M.Babcock : DTO 대 엔티티 표현식에서 사용하려는 것은 라이브러리 로직의 일부가 아닙니다.
esskar

4
@esskar 귀하의 블로그 / 전체 사이트가 사라진 것 같습니다. 움직 였나요?
Jon

3

전체가 아닙니다. 그러나 Dynamic LINQ 샘플이 도움이 될 수 있습니다. 확실히 표현식을 문자열로 직렬화 할 수 있지만 (일부-제네릭은 약간 엉망인 것처럼 보임) 내장 파서가 없습니다.


샘플을 사용하여 식을 문자열로 직렬화하는 방법을 찾을 수 없습니다. 다른 방향으로 만 문자열로 가져와 식 트리를 만듭니다. 어떤 방법을 호출합니까?
Christopher Edwards


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.