我有这样的XML结构:
<Message>
<Messagehead>
<OSType>Android</OSType>
<RouteDest>SiteServerName</RouteDest>
<ActionType>Enroll</ActionType>
</Messagehead>
<MessageBody>
<Raw>
<![CDATA[OrienginalMessageContent]]>
</Raw>
</MessageBody>
</Message>
我希望将此XML上传到WCF 4.0我的休息服务:
public string Enroll(Message instance)
{
// TODO: Add the new instance of SampleItem to the collection
return "success";
}
Message
是DataContract
类型,我设置如下:
[DataContract(Namespace = "")]
public class Message
{
[DataMember]
public MessageHead MessageHead { get; set; }
[DataMember]
public MessageBody MessageBody { get; set; }
}
public class MessageHead
{
public OSType OSType { get; set; }
public string RouteDest { get; set; }
public Action Action { get; set; }
}
public class MessageBody
{
public string RawRequestContent { get; set; }
}
但是当我从服务器端获得Message
实例时,除了null
之外,所有属性都是OSType
,有人可以告诉我原因吗?我怎么能解决这个问题?
答案 0 :(得分:1)
除了是一个非常糟糕的类名(因为它已经在WCF运行时中使用),你的Message
类也有一些缺陷:
<Message>
<Messagehead>
....
</Messagehead>
您的<Messagehead>
中间有一个小写h
- 但您的班级将其定义为大写:
[DataContract(Namespace = "")]
public class Message
{
[DataMember]
public MessageHead MessageHead { get; set; }
这将无法正常工作 - 案例在WCF消息中很重要且相关!如果您的XML具有小写h
,那么您的DataContract
类也必须如此!
您的XML还需要<Raw>
<MessageBody>
标记
<MessageBody>
<Raw>
<![CDATA[OriginalMessageContent]]>
</Raw>
</MessageBody>
但您的数据合同并不尊重:
public class MessageBody
{
public string RawRequestContent { get; set; }
}
再次 - 那些不排队!名称很重要 - 它们必须匹配在消息的XML表示形式和表示该消息的C#类之间.....