2017-09-05 215 views
0

控制檯應用程序:我有一個對象具有所有的票據細節,我試圖通過webservice傳遞此對象。不能隱式地將類型轉換爲另一個類C#

基本上,我想將「VVV」(票證詳細值列表)分配給「APTR」對象,然後我將「APTR」傳遞給該方法。

控制檯應用程序:

public string SendAllticketDetailsToService(AutoProvisionWebAPIClient.AutoProvisionTicketsResponse vvv) 
    {       
     // bool result = false; 
     string xmlStringResult; 
     xmlStringResult = ""; 
     try 
     {   
      AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse APTR = new AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse(); 

我想分配VVV類對象值APTR,你可以指導我?

  xmlStringResult = ss.GetAllTickets(APTR); 

      Console.WriteLine(xmlStringResult); 
     } 
     catch (Exception ex) 
     { 

      Console.WriteLine(ex.Message); 
     } 
     return xmlStringResult;   
    } 
    //end 

,兩者是不同的命名空間,但相同的類和屬性..當我試圖編譯,我得到像

錯誤55錯誤不能類型 「AutoProvisionWebAPIClient.AutoProvisionTicketsResponse」隱式轉換爲 'AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse' \ ARMWebAPIClient \ AutoProvisionController \ SRMUserRegServiceProxy.cs 44 24 AutoProvisionController

+0

你正在使用什麼類型的服務?您可以查看此https://msdn.microsoft.com/en-us/library/bb628653(v=vs.100)。aspx或使用類似automapper的方法將值從一個對象複製到另一個對象。 –

回答

2

如果它們是兩個不同名稱空間中的兩個類,則即使它們具有相同的屬性和方法,它們也基本上被視爲兩個不同的類。

您應該使用通用名稱空間來定義該類,然後使用它。

編輯

如果你必須使用兩個不同的命名空間(雖然我不知道爲什麼),可以單獨一類對象的屬性複製到其他,這是同樣的想法的一個建議在另一個答案。

namespace NamespaceOne 
{ 
    public class Person 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

namespace NamespaceTwo 
{ 
    public class Person 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

namespace MainNamespace 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      NamespaceOne.Person p1 = new NamespaceOne.Person() { FirstName = "Zaphod", LastName = "Beeblebrox" }; 
      NamespaceTwo.Person p2 = new NamespaceTwo.Person() { FirstName = p1.FirstName, LastName = p1.LastName }; 

      Console.ReadLine(); 
     } 
    } 
} 

再次,這是真的毫無意義,我建議反對它。正確的方法是隻有一個通用命名空間,在這個命名空間中你的類(在本例中爲Person)駐留,並在需要時使用它。像這樣:

namespace CommonNamespace 
{ 
    public class Person 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

namespace MainNamespace 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      CommonNamespace.Person p1 = new CommonNamespace.Person() { FirstName = "Zaphod", LastName = "Beeblebrox" }; 
      CommonNamespace.Person p2 = p1; 

      Console.ReadLine(); 
     } 
    } 
} 
+1

如果這些類在兩個不同的程序集中,那麼創建第三個項目(類庫)來保存這些常用類,並從Web服務和控制檯應用程序中引用此類庫。 –

+1

是的,這是正確的路要走。此外,如果這些需要通過網絡服務器等發送,序列化可能也需要。 – Sach

+0

是的,你是對的。 WebService +控制檯應用程序都調用相同的DLL(命名空間+類)AutoProvisionWebAPIClient.AutoProvisionTicketsResponse,但是當我試圖將「vvv」傳遞給ss.GetAllTickets(vvv)方法時。我收到錯誤。這就是爲什麼我創建WebService類的新實例,如 AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse APTR = new AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse(); – dheepa

0

,兩者是不同的命名空間,但相同的類和屬性

這意味着兩者是完全不同的類別。

一種解決方案是在兩種情況下都有一個類(可能在另一個名稱空間中都使用這兩個程序集)。

另一種方法是創建一個翻譯方法,該方法創建一個AutoProvisionWebAPIClient.AutoProvisionTicketsResponse並返回一個AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse,該方法通過檢查參數的成員並分配給創建的對象來構建。

可能這可能是在其中一個演員中定義的演員操作符,這將允許使用演員而不是方法調用。

相關問題