2017-06-15 26 views
0

WCF新手尋求幫助。我在做什麼錯在這裏: ICardServiceWCF中的複合類型錯誤

[ServiceContract(Namespace = "http://xxxx.xxxxxx.xxxx/xx/xxxxxx")] 
interface ICardService 
{ 
    [OperationContract] 
    Coupon CreateCouponCard(string cardDefinitionCode); 
} 

public class CardService : ICardService 
    { 
     public Coupon CreateCouponCard(string cardDefinitionCode) 
     { 
      Coupon composite = new Coupon(); 

      if (composite == null) 
      { 
       throw new ArgumentNullException("composite"); 
      } 
      if (composite.BoolValue) 
      { 
       composite.PassTypeIdentifier="sdfsdf"; 
       composite.Icon.DisplayGroup = "czxczxczx"; 
      } 
      return composite; 
     } 
    } 

[DataContract(Namespace = "")] 
    public class Coupon : CardCommonDefinition 
     { 
      [DataMember] 
      public string Description {get; set;} 

[DataMember] 
public bool BoolValue 
     { 
      get { return boolValue; } 
      set { boolValue = value; } 
     } 

} 

[DataContract(Namespace = "")] 
    public class CardCommonDefinition 
    { 
     [DataMember] 
     public string PassTypeIdentifier {get; set;} 
    [DataMember] 
     public CardFieldDefinitionEntity Icon {get; set;} 
    } 

[DataContract(Namespace = "")] 
    public class CardFieldDefinitionEntity 
    { 

     [DataMember] 
     public string DisplayGroup {get; set;} 
} 

當我運行它時,它在composite.Icon.DisplayGroup =「czxczxczx」;失敗。對象未設置爲對象的實例。

我沒有任何線索來解決它,你能幫我嗎?

+0

您需要確保在設置「DisplayGroup」屬性之前初始化Coupon對象的Icon屬性。 –

回答

2

你可以通過兩種方式解決這個問題。

One-Initialize Icon property before using it。

public Coupon CreateCouponCard(string cardDefinitionCode) 
{ 

    Coupon composite = new Coupon(); 
    if (composite == null) 
    { 
     throw new ArgumentNullException("composite"); 
    } 
    if (composite.BoolValue) 
    { 
     composite.PassTypeIdentifier="sdfsdf"; 
     composite.Icon = new CardFieldDefinitionEntity(); 
     composite.Icon.DisplayGroup = "czxczxczx"; 
    } 
    return composite; 
} 

兩個 - 有CardCommonDefinition構造和它初始化Icon屬性,使你不必擔心它被空。

[DataContract(Namespace = "")] 
public class CardCommonDefinition 
{ 
    public CardCommonDefinition() 
    { 
     this.Icon = new CardFieldDefinitionEntity(); 
    } 
    [DataMember] 
    public string PassTypeIdentifier {get; set;} 
    [DataMember] 
    public CardFieldDefinitionEntity Icon {get; set;} 
} 

[DataContract(Namespace = "")] 
public class Coupon : CardCommonDefinition 
{ 
    public Coupon : base() 
    { } 
    [DataMember] 
    public string Description {get; set;} 
    [DataMember] 
    public bool BoolValue 
    { 
     get { return boolValue; } 
     set { boolValue = value; } 
    } 
} 
+0

這種方法真的是設計服務的最佳方式嗎?基本上,我從DB接收CardDefinitonEntity,其中包含創建任何類型卡所需的所有字段。我想要做的是爲每種類型的卡片(優惠券,活動,會員,商店等)提供特定於那些卡片的字段和具有所有卡片類型的公用字段的基類。但是我不確定我使用的方法是否正確,因爲在使用它之前實例化一個屬性似乎有些尷尬。林新來C#所以也許這就是爲什麼它似乎對我來說很尷尬。 – Ray

+0

它如何實例化它並不重要,但必須在可以使用對象之前實例化。否則你肯定會得到NullReferenceException。該方法建議根據您在問題中提供的細節。沒有提及數據庫或其他類。如果您想獲得最佳的解決方案,您需要提供相關信息。 –