엔티티를 평평하게하는 LINQ 쿼리에서 생성 된 일부 데이터를 반환해야하는 웹 API odata 서비스가 있습니다. 예를 들어, 데이터 서비스 측에서 LINQ를 사용하여 새로운 속성을 생성하는 명령 목록을 가지고 있습니다. 예를 들어, 0에서 100 사이의 수를 갖는 수를 반환하고 그 사이의 수를 가질 다른 속성을 반환하고자합니다 101 및 200 등. 여기에 간단한 예가 나와 있습니다. 다음과 같은 코드 내 WebApiConfig에서
.NET 서비스 OData는 LINQ 쿼리에서 익명 형식을 반환합니다.
Public IHttpActionResult GetCustomData()
{
var query = (from o in Orders
select CustomerName = o.CustomerName,
LowerCount = o.OrderDetails.Where(f => f.Pieces >= 0 && f.Pieces <= 100).Count(),
MidCount = o.OrderDetails.Where(f => f.Pieces >= 101 && f.Pieces <= 200).Count(),
HighCount = o.OrderDetails.Where(f => f.Pieces >= 201).Count()
);
return Ok(query);
}
가 i를 FunctionConfiguration :
FunctionConfiguration getCustomData = builder.EntityType<Order>().Collection.Function("GetCustomData");
getCustomData.Returns<Object>();
URL이 나를 올바르게 함수를 호출 할 수 있지만, JSON 반환은 빈 배열이 포함되어 있습니다. 예를 들어, 반환 할 레코드가 6 개있는 경우 Json은 내부에 6 개의 빈 []이 있습니다.
또한 Newtonsoft.Json.Linq.JObject를 반환하고 Newtonsoft를 사용하여 Lync를 Json으로 직렬화했지만 런타임 오류가 발생합니다.
"복잡한 유형 'JToken'은 '부모'속성을 통해 자체에 대한 참조를 가지고 있습니다. 복잡한 유형의 순환 루프는 허용되지 않습니다."
이 문제를 해결하기 위해 사용자 지정 클래스를 만들 수 있지만 클라이언트가 일반 탭을 클라이언트에게 보내고 데이터를 읽을 수 있도록 일반 Json을 클라이언트에 보낼 수있는 쉬운 방법이 있어야한다는 것을 알고 있습니다.
클라이언트가 데이터를 "계산"할 수 있도록 전체 주문/주문 세부 정보를 보낼 수 있지만 웹 서비스에서 오는 페이로드를 작게 유지하려고합니다.
클라이언트가 json 배열을 가져오고 있지만 배열이 비어 있기 때문에 가까운 사이라고 느낍니다.
당신이 getCustomData.Returns를 시도 할 수() 및 방법 공공 IHttpActionResult GetCustomData()에서 일반 JSON 문자열을 반환? –