我正在学习在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来定义可以分配该属性的特定对象类型?
感谢您的帮助, 肖恩