Ray
Ray

Reputation: 523

Composite Type error in WCF

A WCF newbie asking for help. What I’m doing wrong here: ICardService

[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;}
}

When I run this it is failing at the composite.Icon.DisplayGroup = "czxczxczx"; with an object not set to an instance of an object.

I don’t have any clue who to resolved it, can you please help me?

Upvotes: 0

Views: 398

Answers (1)

Chetan
Chetan

Reputation: 6891

You can solve this by two way.

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;
}

Two - Have a constructor of CardCommonDefinition and initialize Icon property in it so that you don't need to worry about it being null.

[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; }
    }
}

Upvotes: 2

Related Questions