JSON オブジェクト (Web API から返された) をビュー モデルにマップするにはどうすればよいですか。[ automapper を使用して、C# ビジネス オブジェクトをビュー モデルにマップしています。JSONをビューモデルにマップするのに似たものを探しています]
次のエラーが表示されます:「型には JSON 配列が必要なため、現在の JSON オブジェクトを型 'System.Collections.Generic.IEnumerable`1[CLAW.BLL.MLAReports.Models.CMAReport]' に逆シリアル化できません」。
Webapi でのコントローラーの署名は次のとおりです。
namespace ReportsAPI.Controllers
{
public class ReportsController : ApiController
{
[HttpPost]
public CMAReportVM Reports([FromBody] StatsCriteria criteria)
{
var cmaReport = Service3.GetCMAReport(criteria.Masnums);
//Create Map to enable mapping business object to View Model
Mapper.CreateMap<CMAReport, CMAReportVM>();
// Maps model to VM model class
var cmaVM = Mapper.Map<CMAReport, CMAReportVM>(cmaReport);
reutn cmaVM;
}
}
}
クライアント側のコントローラーの署名は次のとおりです。
namespace MASReports.Controllers
{
public ActionResult Reports(StatsCriteria criteria)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("http://localhost:52765/api/reports", criteria.Masnums.ToString()).Result;
// The below line I get error.
var represlt= response.Content.ReadAsAsync<IEnumerable<CMAReportVM>>().Result;
return View("CMAReportVM", represlt);
}
}
Here's the signature for the model :
namespace MLAReports.Models
{
public class CMAReportVM:ReportsVM
{
public CMAReportVM() {}
public List<Cma_Item> CmaList { get; set; }
public string TimeStampString { get; set; }
public Dictionary<string, string> CriteriaNameValue { get; set; }
}
}
namespace CLAW.BLL.MLAReports.Models
{
public class Cma_Item : IStatsGridable<Cma_Fields>
{
public Cma_Item() {}
#region Properties and Fields
public string PropTypeName { get; set; }
public string StatusName { get; set; }
public string LowP { get; set; }
public string LowXStLP { get; set; }
public string HighP { get; set; }
public decimal? AvgLPFnl { get; set; }
public decimal? AvgSPFnl { get; set; }
#endregion
#region IStatsGrid Properties
public List<string> Headers
{
get
{ return _headers; }
set
{ _headers = value; }
}
private IEnumerable<Cma_Fields> _rowModels;
public IEnumerable<Cma_Fields> RowModels
{
get
{ return _rowModels;}
set
{ _rowModels = value;}
}
private List<string> _headers;
private string _id;
#endregion
}
}
namespace CLAW.BLL.MLaReports.Models
{
public interface IStatsGridable<T>
{
List<string> Headers { get; set; }
string Id { get; set; }
IEnumerable<T> RowModels { get; set; }
}
}
namespace CLAW.BLL.MLAReports.Models
{
public class Cma_Fields
{
public Cma_Fields() { }
#region Properties and Fields
public string Mlanum { get; set; }
public string Address { get; set; }
public string BR { get; set; }
public string BA { get; set; }
public string SF { get; set; }
public string TRId
{
get
{ return _trid; }
set
{_trid = value; }
}
#endregion
}
}
内部例外:
{"現在の JSON オブジェクト (例: {\"name\":\"value\"}) を型 'System.Collections.Generic.IEnumerable`1[CLAW.BLL.MLAReports.Models.CMAReport]' に逆シリアル化できません。型を正しく逆シリアル化するには、JSON 配列 ([1,2,3] など) が必要です。\r\nこのエラーを修正するには、JSON を JSON 配列 ([1,2,3] など) に変更するか、逆シリアル化された型を次のように変更します。 JSON オブジェクトから逆シリアル化できる通常の .NET 型 (たとえば、整数のようなプリミティブ型ではなく、配列やリストのようなコレクション型ではない) であること。 JSON オブジェクト。\r\nパス 'CmaList'、行 1、位置 11."}