在WCF服务中使用XMLElementAttribute指定对象类型

时间:2018-08-08 15:55:13

标签: c# wcf

我正在学习在Visual Studio 2017中使用WCF创建一些基本服务。我正在从公司使用的服务中查看生成的Reference.cs文件,它使用XMLElementAttribute为通用对象指定对象类型。该类中的属性:

private object itemField;

[System.Xml.Serialization.XMLElementAttribute("AccountAlert", typeof(AccountLevelAlertType), Order = 0]
[System.Xml.Serialization.XMLElementAttribute("CustomerAlert", typeof(CustomerLevelAlertType), Order = 0]
public object Item
{
   get { return this.itemField; }
   set 
   {
      this.itemField = value;
      this.RaisePropetyChanged("Item");
   }
}

我一直在尝试使用我创建的测试服务来重新创建此设置,以便更深入地了解创建WCF服务的概念,但是并没有取得成功。以下是我尝试过的方法:

[DataContract]
public class NewType
{
   [DataMember]
   int _testInt = 1;

   [DataMember]
   public int TestInt
   {
      get { return _testInt;
      set { _testInt = value;
   }
}

[DataContract]
public class OldType
{
   [DataMember]
   int _testInt = 2;

   [DataMember]
   public int TestInt
   {
      get { return _testInt;
      set { _testInt = value;
   }
}

[DataContract]
public class TestObject
{
  [DataMember]
  private ObjectType _objectTypeRec;

  [DataMember]
  public ObjectType ObjectTypeRec
  {
     get { return _objectTypeRec; }
     set { _objectTypeRec = value; }
  }
}

[DataContract]
public class ObjectType
{
   [DataMember]
   private object itemField;

   [DataMember]
   [System.Xml.Serialization.XmlElement("NewObject", typeof(NewType), Order = 0)]
   [System.Xml.Serialization.XmlElement("OldObject", typeof(OldType), Order = 0)]
   public object Item
   {
      get { return itemField; }
      set { itemField = value; }
   }
}

还要注意,在我的测试服务中,当我查看生成的Reference.cs文件时,没有看到该文件中的NewType或OldType对象,并且Item属性没有用任何XMLElementAttributes装饰:

[System.Runtime.Serialization.DataMemberAttribute()]
public object Item
{
   get { return this.ItemField; }
   set 
   { 
     if((object.ReferenceEquals(this.ItemField, value != true))
     {
        this.ItemField = value;
        this.RaisePropertyChanged("Item");
     }
   } 
} 

那么如何确保我的所有类都出现在生成的Reference.cs中,以及如何修饰我的类以确保它们具有XMLElementAttributes来定义可以分配该属性的特定对象类型?

感谢您的帮助, 肖恩

0 个答案:

没有答案