다른 서비스를 호출하고 응답 배열을 반환하는 웹 API를 만들려고합니다. 호출 된 서비스가 응답을 반환합니다. 나는 부름받은 서비스에서 개별 항목을 얻을 수있다. 그러나 항목의 배열을 만들고 API에서 응답으로 반환하는 방법을 모르겠다. json으로는 서비스에서 반환Web API에서 응답 배열 반환 C#
는
{
"cr_response": {
"details": [{
"name": "Req",
"fields": [{
"value": "Prj0\r\nPrj1",
"name": "Project"
},
{
"value": "October 13, 2017 14:18",
"name": "Submitted"
},
{
"value": "John",
"name": "Rec Name"
}
]
}],
"cr_metadata": {}
}
}
처럼 보이는 아래
public class Field
{
public string value { get; set; }
public string name { get; set; }
}
public class Detail
{
public string name { get; set; }
public List<Field> fields { get; set; }
}
public class CrMetadata
{
}
public class CrResponse
{
public List<Detail> details { get; set; }
public CrMetadata cr_metadata { get; set; }
}
public class RootObject
{
public CrResponse cr_response { get; set; }
}
이 서비스의 응답을 서비스를 호출하고 검색하기위한 코드가 같은 POCO 클래스는 보이는
var response = await iLab_client.GetAsync(uri);
var datafile = await response.Content.ReadAsStringAsync();
var returnDataObj = JsonConvert.DeserializeObject<DTO.RootObject>(datafile);
foreach (var form in returnDataObj.cr_response.details)
{
name_response = form.name;
return Ok(name_response);
}
여기에서 세부 정보에서 이름에 액세스 할 수 있지만 확실하지는 않습니다. 필드의 모든 이름과 값에 액세스하여 배열로 구성 할 수 있습니까? JSON 응답으로 보내주십시오. 나는
foreach (var form in returnDataObj.cr_response.details)
{
var id_response = form.fields;
return Ok(id_response);
}
같은 시도하지만
나는 오류 메시지가 특정 콘텐츠 유형'응용 프로그램/xml'을 언급 것을 알 수 있습니다. 유효한 XML은 하나의 루트 노드가 있어야합니다. 반환 된 객체가 컬렉션이 될 수없는 가능성이 있습니다. 클라이언트를 변경하여 JSON을 요청하면 문제가 해결 될 수 있습니다. 그렇지 않으면 배열을 직접 반환하는 대신 배열을 가진 객체를 속성 중 하나로 반환하는 것이 좋습니다. – StriplingWarrior
@StriplingWarrior HttpClient 대신 변경 하시겠습니까? – xyz
아니요. 귀하의 코드는 * 웹 서비스 ('ilab_client.GetAsync (...)')와 * 클라이언트 ('return Ok (...);')에 의해 소비되고 있습니다. 웹 API 엔드 포인트를 사용하는 클라이언트가 HTTP 요청을 전송 중입니다. 웹 API는 요청을보고 JSON이 아닌 XML로 응답을 직렬화해야한다고 생각합니다. 이는 웹 요청에서 헤더 (또는 헤더 부재)가 원인 일 수 있습니다. 또는 [웹 API 응용 프로그램이 구성된 방식] 때문일 수 있습니다 (https://stackoverflow.com/q/12629144/120955). 또는이 두 가지 조합. – StriplingWarrior