2012-10-06 26 views
0

我在MonoTouch(6.0.2)中使用帶有BasicHttpBinding的WCF來使用.net WCF服務, 我傳遞了3個參數,其類型爲int,int ,DishOrder(用戶自定義類型),在服務器站點中,它可以正確讀取int參數,但用戶定義的對象(dishOrder)始終爲空,爲什麼?MonoTouch 6.0.2:爲什麼不能在使用WCF服務時序列化對象

我已經在用戶定義的類型類中使用了[DataContract]屬性標記。

在MonoTouch的(客戶端代碼:)

[DataContract] 
public class DishOrder2 
{ 
    [DataMember] 
    public int BillID { get; set; } 
    [DataMember] 
    public int TableID { get; set; } 
} 

public partial interface IMenuContract 
{ 
    [OperationContract] 
    int OpenTable(int tableID, int lastVerNo,DishOrder2 order); 
} 

public partial class MyServiceClient : ClientBase<IMenuContract>,IMenuContract { 
    public int OpenTable(int tableID, int lastVerNo,DishOrder2 order) 
    { 
     return Channel.OpenTable(tableID,lastVerNo,order); 
    } 

    private partial class FDMenuServiceClientChannel 
    { 
     public int OpenTable(int tableID, int lastVerNo,DishOrder2 order) 
     { 
      object[] _args = new object[3]; 

      _args[0]=tableID; 
      _args[1]=lastVerNo; 
      _args[2]=order; 
      return (int)base.Invoke("OpenTable", _args); 
     } 
    } 
} //end of public partial class FDMenuServiceClient 



    pulic void CallServiceTest() 
    { 
      using (MyServiceClient.serviceClient = MyServiceClient.CreateServiceClient()) { 
        DishOrder2 test=new DishOrder2(); 
      test.BillID=123; 
      test.TableID=456; 
       serviceClient.OpenTable(111,222,test); 
      } 
    } 
在服務站點

(.NET 3.5)代碼:

[DataContract] 
public class DishOrder2 
{ 
    [DataMember] 
    public int BillID { get; set; } 
    [DataMember] 
    public int TableID { get; set; } 
} 

[OperationContract] 
int OpenTable(int tableID, int lastVerNo,DishOrder2 order); 

    public int OpenTable(int tableID, int lastVerNo,DishOrder2 dishOrder) //service implementation 
    { 
     try 
     { 
      //**---why the object:dishorder is null?** throw the nullref exception 
      if (dishOrder.BillID>0) ...     
      //**tableID & lastVerNo is read OK 111,222** 
        ...    
     } 
     catch (Exception ex) 
     { 
      throw FaultException...    
     } 
    } 

回答

0

因爲我無法找到原因無法序列化對象自動在MonoTouch的所以我必須自己做序列化。現在可以工作了,謝謝大家。

public static string XmlSerialize<T>(T obj) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(T)); 
      serializer.Serialize(ms, obj); 
      ms.Seek(0, SeekOrigin.Begin); 
      using (StreamReader reader = new StreamReader(ms, Encoding.UTF8)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
相關問題