【发布时间】:2013-03-06 09:10:50
【问题描述】:
服务代码:
[ServiceContract]
public interface IServices
{
[OperationContract]
[XmlSerializerFormat]
GetProductsResponse Getproducts(GetProductsRequest productsrequest);
[OperationContract]
SaveProductsResponse SaveProducts1(SaveProductsRequest1 productsrequest);
}
public class GetProductsRequest
{
[XMLElement]
public string id;
[XMLElement,typeof(Person)]
public Person[] Persons;
}
[DataContract]
public class SaveProductsRequest1
{
[DataMember]
public List<Person> Persons;
}
[DataContract]
public class Person
{
[DataMember]
public int Id;
[DataMember]
public string Name;
[DataMember]
public Sex Sex;
}
[DataContract]
public enum Sex
{
[EnumMember]
Male,
[EnumMember]
Female
}
客户:
ServicesClient client = new ServicesClient();
SaveProductsRequest1 req = new SaveProductsRequest1();
req.Persons = new List<Person> { new Person { Id = 10, Name = "Al", Sex = Sex.Female} }.ToArray();
client.SaveProducts1(req);
我能够在服务端获取值“Al”(字符串)。但是值 10 和 Male(值类型)在服务端被重置为默认值(0 和 Male)。
只有当我将 XMLElement 用于任何数组属性和一个额外的字符串属性时,我在服务合同(在本例中为 GetProducts)和我的 GetProducts 类中为我的任何一种方法设置了 XmlSerializerFormat 时才会发生这种情况。
WCF 运行时有问题吗?
【问题讨论】:
-
请包含 Person 类
-
我们能看看
Person是如何声明的吗? -
数据合约长什么样?
-
嗯...您的
Person课程无法完成。一定是缺少Sex数据成员 -
@Al.Net
Sex在哪里?我担心的是,我们会追逐一个明显不同的课程版本中不存在的问题