服务代码:

[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'(string)。但是值 10 和男性(值类型)在服务端重置为默认值(0 和男性)。

只有当我为任何数组属性和一个附加字符串属性放置 XMLElement 时,当我为服务契约(Contract)中的任何一种方法(在本例中为 GetProducts)和在我的 GetProducts 类中使用 XmlSerializerFormat 时,才会发生这种情况。

WCF 运行时有问题吗?

最佳答案

我已经使用您的服务器端代码设置了一个测试 WCF 服务,并再次使用您的示例客户端代码设置了一个测试客户端,并且它工作正常:

如您所见,传输了 1 个 Person,所有 3 个值都完好无损。如果最后发生了一些不同的事情,它可能与配置文件中的配置选项有关,但从根本上说:代码有效。我正在使用 .NET 4.5 进行测试

关于c# - WCF 不反序列化值类型。神秘行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15243094/

10-16 16:42