C# 复合类型的整数值在WCF操作时变为null
我对WCF服务和c#有一种奇怪的行为;我正在尝试向服务操作发送复杂类型[FooRequest];[FooRequest]有一些属性,其中一个是用户定义类型[MyType],它只有字符串和整数等简单属性 现在,当客户机传递包含y的[FooRequest]对象时,服务器接收到它时,除了[MyType]中的整数和小数外,还有完整的参数。你能帮我吗 服务合同:C# 复合类型的整数值在WCF操作时变为null,c#,wcf,C#,Wcf,我对WCF服务和c#有一种奇怪的行为;我正在尝试向服务操作发送复杂类型[FooRequest];[FooRequest]有一些属性,其中一个是用户定义类型[MyType],它只有字符串和整数等简单属性 现在,当客户机传递包含y的[FooRequest]对象时,服务器接收到它时,除了[MyType]中的整数和小数外,还有完整的参数。你能帮我吗 服务合同: [DataContract] public enum MessageType { [EnumMember] REQ1,
[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; }
}
你的字体装饰不正确。而不是
[MessageContract]
public class FooRequest
{
[MessageHeader]
public int FooId { get; set; }
应该是
[DataContract]
public class FooRequest
{
[DataMember]
public int FooId { get; set; }
对MyType执行相同的操作。因此,您只需更改属性。如果有人面临相同的问题,我找到了解决此问题的方法。使用[ServiceContract]向服务接口添加[XmlSerializerFormat]装饰将解决此问题。我认为这与序列化存在某种冲突。我刚刚注意到,当我将[SomeEnum]更改为简单类型(即int或string)时,一切正常。如果我将其更改为enum,则问题再次出现。此外,如果我将enum属性[SomeEnum]的修饰改为MessageBodyMember而不是MessageHeader,则效果良好。您是对的,当我将修饰改为DataContract时,效果良好。不幸的是,我不能在实际代码中更改它,因为我必须发送定制的SOAP消息。所以我一直坚持着这份合同。还有其他解决办法吗?
[MessageContract]
public class FooRequest
{
[MessageHeader]
public int FooId { get; set; }
[DataContract]
public class FooRequest
{
[DataMember]
public int FooId { get; set; }