我对WCF服务和c#有一个奇怪的行为;我正在尝试将复杂类型[FooRequest]发送到服务操作; [FooRequest]有一些属性,其中一个是用户定义类型[MyType],它只有字符串和整数这样的简单属性。
现在,当客户端传递包含y的[FooRequest]对象时,服务器接收除[MyType]内的整数和小数以外的完整参数。你能帮我解决吗?
服务合约:
[DataContract]
public enum MessageType
{
[EnumMember]
REQ1,
[EnumMember]
REQ2
}
[MessageContract]
public class MyType
{
[MessageHeader]
public string Title { get; set; }
[MessageHeader]
public decimal DecValue { get; set; }
[MessageHeader]
public int IntValue { get; set; }
}
[MessageContract]
public class FooRequest
{
[MessageHeader]
public int FooId { get; set; }
[MessageHeader]
public MessageType SomeEnum { get; set; }
[MessageHeader]
public List<MyType> SomeObject { get; set; }
}
在客户端:
Svc.FooServiceClient client = new Svc.FooServiceClient();
FooRequest req = new Svc.FooRequest()
{
FooId = 1,
SomeEnum = MessageType.REQ1,
SomeObject = (new List<MyType>() { new Svc.MyType() { Title = "txt txt", DecValue = 23.5, IntValue = 500 }}).ToArray()
};
FooResponse res = client.MyOperation(req );
在服务器端
public class FooService : IFooService
{
public FooResponse MyOperation(FooRequest request)
{
/*
request.FooId = 1
request.SomeEnum = REQ1
request.SomeObject.Length = 1
request.SomeObject[0].Title = "txt txt"
request.SomeObject[0].DecValue = null ????!!!! here is the problem
request.SomeObject[0].IntValue = null ????!!!! here is the problem
*/
}
}
答案 0 :(得分:0)
您错误地修饰了类型。而不是
[MessageContract]
public class FooRequest
{
[MessageHeader]
public int FooId { get; set; }
应该是
[DataContract]
public class FooRequest
{
[DataMember]
public int FooId { get; set; }
对MyType执行相同操作。所以你只需要改变属性。
答案 1 :(得分:0)
如果某人面临同样的问题,我找到了解决此问题的方法。使用[ServiceContract]将[XmlSerializerFormat]修饰添加到服务接口将解决该问题。我认为这是序列化的某种冲突问题。