2017-06-15 49 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。该方法建议根据您在问题中提供的细节。没有提及数据库或其他类。如果您想获得最佳的解决方案,您需要提供相关信息。 –