0

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."}

4

1 に答える 1

1

レポート コントローラーの署名が 1 つのアイテムを返しています

public CMAReportVM Reports([FromBody] StatsCriteria criteria)

しかし、あなたはIEnumerableとしてそれを読み取ろうとしています

var represlt= response.Content.ReadAsAsync<IEnumerable<CMAReportVM>>().Result;
于 2013-11-05T19:57:28.587 に答える