他のサービスを呼び出し、応答の配列を返すWeb APIを作成しようとしています。呼び出されたサービスは応答を返します。私は呼び出されたサービスから個々のアイテムを得ることができます。しかし、どのように項目の配列を構築し、私が作成しているAPIからの応答として返すか分からない。Web 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": {}
}
}
のように見え、
以下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);
}
ようにしようとしたが、それはあなたがあなたの配列を記入し、foreach
ループの外にそれを返す必要がウェブAPIから配列を返すに
<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を要求するようにクライアントを変更できる場合は、問題が修正される可能性があります。それ以外の場合は、配列を直接返すのではなく、その配列を持つオブジェクトをそのプロパティの1つとして返すこともできます。 – StriplingWarrior
@StriplingWarrior HttpClientの代わりに変更を求めていますか? – xyz
いいえ、あなたのコードは、Webサービス( 'ilab_client.GetAsync(...)')と*クライアント( 'return Ok(...);')で*消費されます。 Web APIエンドポイントを消費しているクライアントがHTTP要求を送信しています。 Web APIはリクエストを見て、レスポンスをJSONではなくXMLとしてシリアライズする必要があると考えています。これは、Webリクエストのヘッダー(またはヘッダーがないため)が原因である可能性があります。または、[Web APIアプリケーションの設定方法](https://stackoverflow.com/q/12629144/120955)が原因である可能性があります。またはこれらの2つの組み合わせ。 – StriplingWarrior