響應數組我試圖創建一個Web API,它調用其他服務,並返回響應的陣列。被叫服務返回響應。我能夠從被叫服務中獲取單個項目。但不知道如何構建數組項並返回來自我創建的API的響應。返回從網頁API C#
的JSON從服務返回的樣子
{
"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": {}
}
}
而POCO類看起來像
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; }
}
下面是調用服務和檢索來自服務的響應代碼
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);
}
但它拋出錯誤,如
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content
type 'application/xml; charset=utf-8'.
</ExceptionMessage>
System.InvalidOperationException
我注意到,該錯誤消息特別提到的內容類型'應用程序/ xml'。有效的XML要求存在單個根節點。返回的對象可能不是一個集合。如果您可以將客戶端更改爲請求JSON,那麼可以解決問題。否則,你可能會很好地返回一個數組作爲其屬性的對象,而不是直接返回數組。 – StriplingWarrior
@StriplingWarrior您是否要改變而不是HttpClient? – xyz
號您的代碼是既耗費* * Web服務('ilab_client.GetAsync(...)')和*通過消耗*客戶端('返回OK(...);')。使用Web API端點的客戶端正在發送HTTP請求。 Web API正在查看請求,並認爲它需要將響應序列化爲XML而不是JSON。這可能是由於Web請求上的標題(或缺少標題)。或者可能是由於[您的Web API應用程序配置的方式](https://stackoverflow.com/q/12629144/120955)。或者這兩者的一些組合。 – StriplingWarrior