Json.NET 및 System.Linq.Dynamic을 사용하여 복잡한 json 객체를 사용자 정의 필터 / 조건 자와 일치 시키려고합니다. 내 코드는 다음과 같습니다.
var json = @"{""Name"":""Jane Doe"",""Occupation"":""FBI Consultant""}";
dynamic person = JObject.Parse(json);
var people = new[] { person };
var isMatch = people.Where("Name=@0", "Jane Doe").Any();
Console.WriteLine(isMatch);
이것은와의 통화를 나에게 오류를 제공 Where
-statement :
'Object'유형에 'Name'속성 또는 필드가 없습니다.
대신 익명 객체를 사용하는 경우 두 번째 줄을 이것으로 바꾸면 다음과 같이 작동합니다.
var person = new { Name = "Jane Doe", Occupation = "FBI Consultant"};
json 문자열을 직렬화 해제하는 또 다른 방법이 있습니까? Json 객체가 일치하는지 확인하기 위해 문자열 술어로 쿼리 할 수 있습니까?
편집 : json-string 및 Where 문은 동적이며 사용자가 제공합니다. 많은 속성이 있으며 코드를 실행하기 전에 이름을 모릅니다. 필드 이름과 값은 모두 사용자가 제공합니다.
Where
문을 다음으로 바꾸십시오.
var isMatch = people.Where(x => x.Name == "Jane Doe").Any();
다음과 같이 단순화 할 수 있습니다.
var isMatch = people.Any(x => x.Name == "Jane Doe");
이것은 원하는 것이 아닐 수도 있지만 간단한 System.Linq는 요구를 쉽게 충족시킬 수 있습니다.
이 경우 동적으로 수행하려고합니다.
var isMatch = people.Any(x => x.GetValue("Name") == "Jane Doe");