【发布时间】:2012-07-27 19:22:05
【问题描述】:
好吧,我真的迷失了这个。我创建了一个 wcf 服务,我将 xml 发布到该服务,这些服务对数据进行了处理。一切都很好,除非我将打开的 xml 标记放在我的 xml 的最顶部。当我在调试模式下查看所有内容时,数据显示为空。
我在 wcf 中的 C# 代码是这样的:
public interface ITest
{
[OperationContract]
void DoWork();
[OperationContract]
[WebDispatchFormatter]
[WebInvoke(UriTemplate = "MyTest", Method = "*")]
void MyTest(PassedIn request);
}
[Serializable]
[DataContract(Namespace = "", Name = "")]
public class PassedIn
{
public PassedIn() { }
[DataMember]
public string firstname {get; set;}
[DataMember]
public string lastname {get; set;}
[DataMember]
public string email {get; set;}
}
这是不同的 xml 帖子:
<mypost>
<firstname>test</firstname>
<lastname>foo</lastname>
<email>test@bar.com</email>
</mypost>
<?xml version="1.0"?>
<mypost>
<firstname>test</firstname>
<lastname>foo</lastname>
<email>test@bar.com</email>
</mypost>
我可以通过将订单添加到数据成员中来解决这个问题,当标签在 xml 中时数据不会丢失,如下所示:
public class PassedIn
{
public PassedIn() { }
[DataMember (order=1)]
public string firstname {get; set;}
[DataMember (order=2)]
public string lastname {get; set;}
[DataMember (order=3)]
public string email {get; set;}
}
但现在它具有相反的效果。如果我没有“?xml 版本”标签,则数据将通过 null。
有人遇到过这种情况吗?真的可以使用一些建议。谢谢
【问题讨论】:
-
不知道这是否重要,但您是否尝试过使用
[DataContract]属性装饰 PassedIn? -
是的,我把那部分放在外面了……它已经在里面了。我刚刚在那里编辑了我的代码。
-
如果你能控制两端,看看ServiceStack。
标签: c# xml wcf serialization