C# WCF中的复合类型错误

C# WCF中的复合类型错误,c#,wcf,C#,Wcf,一个WCF新手请求帮助。我做错了什么: ICardService [ServiceContract(Namespace = "http://xxxx.xxxxxx.xxxx/xx/xxxxxx")] interface ICardService { [OperationContract] Coupon CreateCouponCard(string cardDefinitionCode); } 当我运行此命令时,它在composite.Icon.DisplayGr

一个WCF新手请求帮助。我做错了什么: ICardService

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





当我运行此命令时,它在composite.Icon.DisplayGroup=“czxczx”处失败;对象未设置为对象的实例


我不知道是谁解决的,你能帮我吗?

你可以用两种方法解决这个问题

一-在使用前初始化
图标
属性

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;
}
第二个-有一个
cardcomondefinition
的构造函数,并在其中初始化
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; }
    }
}

你可以用两种方法来解决这个问题

一-在使用前初始化
图标
属性

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;
}
第二个-有一个
cardcomondefinition
的构造函数,并在其中初始化
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; }
    }
}

在设置
DisplayGroup
属性之前,您需要确保优惠券对象的图标属性已初始化。在设置
DisplayGroup
属性之前,您需要确保优惠券对象的图标属性已初始化。这种方法真的是设计服务的最佳方法吗?基本上,我从DB a CardDefinitionEntity接收创建任何类型卡所需的所有字段。我想做的是为每种类型的卡(优惠券、活动、会员、商店等)创建一个类,其中包含特定于这些卡的字段,并创建一个基类,其中包含所有卡类型的公共字段。但我不确定我使用的方法是否正确,因为在使用属性之前实例化属性似乎有点尴尬。我对C#还不熟悉,所以也许这就是为什么我觉得C#是一个很好的例子。不管你如何实例化它,但你必须先实例化,然后才能使用对象。否则您肯定会得到NullReferenceException。该方法是根据您在问题中提供的详细信息提出的。没有提到数据库或其他类。如果你想得到最合适的解决方案,你需要提供相关信息。这种方法真的是设计服务的最佳方法吗?基本上,我从DB a CardDefinitionEntity接收创建任何类型卡所需的所有字段。我想做的是为每种类型的卡(优惠券、活动、会员、商店等)创建一个类,其中包含特定于这些卡的字段,并创建一个基类,其中包含所有卡类型的公共字段。但我不确定我使用的方法是否正确,因为在使用属性之前实例化属性似乎有点尴尬。我对C#还不熟悉,所以也许这就是为什么我觉得C#是一个很好的例子。不管你如何实例化它,但你必须先实例化,然后才能使用对象。否则您肯定会得到NullReferenceException。该方法是根据您在问题中提供的详细信息提出的。没有提到数据库或其他类。如果要获得最佳拟合解决方案,您需要提供相关信息。
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;
}
[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; }
    }
}