Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复合类型的整数值在WCF操作时变为null_C#_Wcf - Fatal编程技术网

C# 复合类型的整数值在WCF操作时变为null

C# 复合类型的整数值在WCF操作时变为null,c#,wcf,C#,Wcf,我对WCF服务和c#有一种奇怪的行为;我正在尝试向服务操作发送复杂类型[FooRequest];[FooRequest]有一些属性,其中一个是用户定义类型[MyType],它只有字符串和整数等简单属性 现在,当客户机传递包含y的[FooRequest]对象时,服务器接收到它时,除了[MyType]中的整数和小数外,还有完整的参数。你能帮我吗 服务合同: [DataContract] public enum MessageType { [EnumMember] REQ1,

我对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; }
}

你的字体装饰不正确。而不是

[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; }