2017-08-22 12 views
-1

私のアプリケーションにExcelからインポートしようとしていますが、asp.net mvcを使用して保存しようとしています私は、このエラー'System.Collections.Generic.List <BPP.BPPCCSPCollabCacService.CAC>'から 'BPPCCSPCollabCacService.CAC []'に変換できません

Cannot Convert from 'List' to 'T[]'

ICacService

public interface ICacService 
{ 
    [OperationContract] 
    [ApplyDataContractResolver] 
    CheckResult CheckCacImportData(string fileName, List<CAC> importCacData); 

    [OperationContract] 
    [ApplyDataContractResolver] 
    void SaveCacImportData(IEnumerable<CAC> importCacData); 
} 

CacService

を得ました210
public class CacService : ICacService 
{ 

    public CheckResult CheckCacImportData(string fileName, List<CAC> importCacData) 
    { 
     var result = new CheckResult(); 

     var targetFile = new FileInfo(fileName); 

     if (!targetFile.Exists) 
     { 
      result.ID = Guid.NewGuid(); 
      result.Success = false; 
      result.ErrorCount = 0; 
      result.ErrorMessage = "Data Import Error!"; 
      return result; 
     } 

     var excelFile = new ExcelQueryFactory(fileName); 

     // 
     //excelFile.AddMapping<CAC>(x => x.ID, "ID"); 
     excelFile.AddMapping<CAC>(x => x.RC_NUMBER, "RC Number"); 
     excelFile.AddMapping<CAC>(x => x.COMPANY_NAME, "Company Name"); 
     excelFile.AddMapping<CAC>(x => x.OWNERSHIP_STRUCTURE, "Ownership Structure"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_STREET, "Street"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_CITY, "City"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_STATE, "State"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_PMB, "PMB"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_POBOX, "PO Box"); 
     excelFile.AddMapping<CAC>(x => x.ADDRESS_LGA, "LGA"); 
     excelFile.AddMapping<CAC>(x => x.DATE_OF_REGISTRATION, "Registration Date"); 

     //SheetName 
     var excelContent = excelFile.Worksheet<CAC>("List of CAC"); 

     int errorCount = 0; 
     int rowIndex = 1; 
     var importErrorMessages = new List<string>(); 

     // 
     foreach (var row in excelContent) 
     { 
      var errorMessage = new StringBuilder(); 
      var cacRecord = new CAC(); 

      // cacRecord.ID = row.ID; 
      cacRecord.ADDRESS_STREET = row.ADDRESS_STREET; 
      cacRecord.ADDRESS_CITY = row.ADDRESS_CITY; 
      cacRecord.ADDRESS_STATE = row.ADDRESS_STATE; 
      cacRecord.ADDRESS_PMB = row.ADDRESS_PMB; 
      cacRecord.ADDRESS_POBOX = row.ADDRESS_POBOX; 
      cacRecord.ADDRESS_LGA = row.ADDRESS_LGA; 
      cacRecord.DATE_OF_REGISTRATION = row.DATE_OF_REGISTRATION; 
      cacRecord.ACTION_STATUS = 1; 
      cacRecord.CREATED_DATE = DateTime.Now; 

      //RC Number 
      if (string.IsNullOrWhiteSpace(row.RC_NUMBER)) 
      { 
       errorMessage.Append("RC - Cannot be Blank. "); 
      } 
      cacRecord.RC_NUMBER = row.RC_NUMBER; 

      //Company Name 
      if (string.IsNullOrWhiteSpace(row.COMPANY_NAME)) 
      { 
       errorMessage.Append("Company Name - Cannot be Blank. "); 
      } 
      cacRecord.COMPANY_NAME = row.COMPANY_NAME; 

      //Ownership Structure 
      if (string.IsNullOrWhiteSpace(row.OWNERSHIP_STRUCTURE)) 
      { 
       errorMessage.Append("Ownership Structure - Cannot be Blank. "); 
      } 
      cacRecord.OWNERSHIP_STRUCTURE = row.OWNERSHIP_STRUCTURE; 

      //============================================================================= 
      if (errorMessage.Length > 0) 
      { 
       errorCount += 1; 
       importErrorMessages.Add(string.Format(
        "Error {0} Windows cannot access this device:{1}{2}", 
        rowIndex, 
        errorMessage, 
        "<br/>")); 
      } 
      importCacData.Add(cacRecord); 
      rowIndex += 1; 
     } 

     try 
     { 
      result.ID = Guid.NewGuid(); 
      result.Success = errorCount.Equals(0); 
      result.RowCount = importCacData.Count; 
      result.ErrorCount = errorCount; 

      string allErrorMessage = string.Empty; 

      foreach (var message in importErrorMessages) 
      { 
       allErrorMessage += message; 
      } 

      result.ErrorMessage = allErrorMessage; 

      return result; 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 

    /// Saves the import data. 
    public void SaveCacImportData(IEnumerable<CAC> importCacData) 
    { 
     try 
     { 
      //Add or Remove 
      using (var db = new COLLABEntities()) 
      { 
       foreach (var item in db.CAC.OrderBy(x => x.CAC_ID)) 
       { 
        db.CAC.Remove(item); 
       } 
       db.SaveChanges(); 
      } 

      //Save and Comit file 
      using (var db = new COLLABEntities()) 
      { 
       foreach (var item in importCacData) 
       { 
        db.CAC.Add(item); 
       } 
       db.SaveChanges(); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 
} 

コントローラ

 [HttpPost] 
    public ActionResult Import(string savedFileName) 
    { 
     var jo = new JObject(); 
     string result; 

     try 
     { 
      var fileName = string.Concat(Server.MapPath(fileSavedPath), "/", savedFileName); 
      var importCacData = new List<CAC>(); 
      //var helper = new ImportDataHelper(); 
      var helper = new CacServiceClient(); 
      var checkResult = helper.CheckCacImportData(fileName, importCacData); 

      jo.Add("Result", checkResult.Success); 
      jo.Add("Msg", checkResult.Success ? string.Empty : checkResult.ErrorMessage); 

      if (checkResult.Success) 
      { 
       helper.SaveCacImportData(importCacData); 
      } 
      result = JsonConvert.SerializeObject(jo); 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
     return Content(result, "application/json"); 
    } 

親切に助けてください。どこが間違っているのですか?var helper = new CacServiceClient();を使用して、私のコントローラからサービスを呼び出そうとしました。しかし、私は図でエラーが発生しました。

+0

関連コードのみが必要です。これは、エラーが発生した場所とおそらくクラスです。 –

+0

投稿者:Public CheckResult宛先:publicリスト jdweng

答えて

1

あなたの質問とサンプルに基づいて、私はWCFを使用していると仮定し、プロキシを作成し、その上にメソッドを呼び出し、このエラーが発生しました。

問題は、WCFがワイヤを介して配列としてコレクションをシリアル化することです。 List<T>クラスを使用する場合は、配列の代わりにリストを生成するようにプロキシジェネレータを設定する必要があります。

サービス参照の設定オプションには、「高度な」オプションがあります。その下で、配列の代わりにList<T>にコレクションを逆シリアル化することができます。

+0

どうすればいいですか? – Jibike

+0

[this](http://mshelp.be/how-to-configure-a-wcf-proxy-to-returna-a- generic-list-259.htm)のスクリーンショットの詳細と詳細なステップ: –

+0

多くの問題を解決しました。しかし、他の問題が出てきました。 'System.Collections.Generic.List 'から' System.IO.Stream''125に変換できません – Jibike

関連する問題