我想序列化一个名为ComplexModel
的对象,该对象在wcf中具有复杂属性,首先我使用List<SimpleModel> SimpleModel
作为我对象的属性。
我的wcf模型
[DataContract]
//[KnownType(typeof(SimpleModel[]))]
public class ComplexModel
{
[DataMember]
public String Name { get; set; }
[DataMember]
public Int32 Age { get; set; }
//change List<SimpleModel> to SimpleModelCollection
[DataMember]
public SimpleModelCollection SimpleModel { get; set; }
}
/// <summary>
/// defined a custom type to implement the IEnumerable interface instead of List SimpleModel
/// </summary>
[Serializable]
[CollectionDataContract]
[KnownType(typeof (SimpleModel))]
public class SimpleModelCollection : IEnumerable<SimpleModel>
{
public IList<SimpleModel> List = new List<SimpleModel>();
public SimpleModelCollection()
{
}
public SimpleModelCollection(IList<SimpleModel> objs)
{
List = objs;
}
public void Add(SimpleModel obj)
{
List.Add(obj);
}
//IEnumerable<SimpleModel> member
public IEnumerator<SimpleModel> GetEnumerator()
{
return List.GetEnumerator();
}
//IEnumerable member
IEnumerator IEnumerable.GetEnumerator()
{
return List.GetEnumerator();
}
}
[DataContract]
public class SimpleModel
{
[DataMember]
public string MumName { get; set; }
[DataMember]
public int Point { get; set; }
[DataMember]
public DateTime BirthDate { get; set; }
}
我调试它告诉我我没有实现IEnumerable接口。所以我尝试实现它,但它仍然告诉我实现IEnumerable接口。如果我有其他复杂属性,我必须定义另一个集合。有没有更好的方法来避免这种情况?为什么为什么最好直接返回xml或json格式而不是对象(实体)?
我的wcf界面
[ServiceContract]
public interface ITestService1
{
[OperationContract]
ComplexModel DoWork();
}
我的wcf课程
public class TestService1 : ITestService1
{
public ComplexModel DoWork()
{
var SimpleModels = new SimpleModelCollection();
SimpleModels.Add(new SimpleModel
{
MumName = "def",
BirthDate = DateTime.MinValue,
Point = 99
});
SimpleModels.Add(new SimpleModel
{
MumName = "hig",
BirthDate = DateTime.Now,
Point = 100
});
return new ComplexModel
{
Age = 10,
Name = "abc",
SimpleModel = SimpleModels
};
}
}