如何将复杂对象传递给WCF

如何将复杂对象传递给WCF

问题描述:

我正在使用Visual Studio 2010和.NET 4.0。我创建了一个Web方法,我试图用复杂对象(类的类对象)作为参数调用它,但它引发错误“对象引用未设置为对象的实例”。请帮助我如何纠正它。 WCF是如下:如何将复杂对象传递给WCF

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    void DoWork(); 

    [OperationContract] 
    void RedirectDeposit(string TransactionId, Amount amount); 
} 

public class Service : IService 
{ 
    public void DoWork() 
    { 

    } 

    public void RedirectDeposit(string TransactionId, Amount amount) 
    { 
     string transactionId = ""; 
     string tranAmount = ""; 
     string tranCurrency = ""; 
     string exchangeRate = ""; 

     try 
     { 
      transactionId = TransactionId; 
      tranAmount = amount.Amt; 
      tranCurrency = amount.Currency; 
      exchangeRate = amount.Rate.ExRate; 
     } 
     catch (Exception ex) 
     { 
      Utility.LogMsg("Amount : " + ex.Message); 
     } 

    } 
} 

[DataContract] 
public class Amount 
{ 
    [DataMember] 
    public string Amt { get; set; } 
    [DataMember] 
    public string Currency {get; set; } 
    [DataMember] 
    public ExchangeRate Rate { get; set; } 

} 

[DataContract] 
public class ExchangeRate 
{ 
    [DataMember] 
    public string ExRate { get; set; } 

} 

客户端调用如下:

playtechsrv.ServiceClient service = new ServiceClient(); 
Amount amount = new Amount(); 

try 
{ 
     // Put user code to initialize the page here 
     amount.Amt = "10"; 
     amount.Currency = "USD"; 
     amount.Rate.ExRate = "1255"; // Error happen here 

} 
catch (Exception ex) 
{ 
     Utility.LogMsg(ex.Source); 
} 

amount.Rate.ExRate = "1255";你想要的值分配给哪个尚未初始化属性(Rate)线。因此,您不能分配其属性ExRate

为了使这项工作,你必须初始化Rate第一:

amount.Rate = new ExchangeRate(); 
amount.Rate.ExRate = "1255"; 

或合并的初始化和赋值:

amount.Rate = new ExchangeRate { ExRate = "1255" }; 
+0

嗨,这是工作。非常感谢。 – sithuwin

+0

不客气。 – khlr