サービスコード:
[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)にリセットされます。
これは、サービスコントラクト(この場合はGetProducts)のいずれかのメソッドにXmlSerializerFormatがあり、任意の配列プロパティと1つの追加の文字列プロパティにXMLElementを配置したときにGetProductsクラス内にある場合にのみ発生します。
WCFランタイムに問題がありますか?