将xml版本标签添加到xml并发布到wcf时,数据丢失了
问题描述:
好吧,我真的迷失在这一张上。我创建了一个wcf服务,我发布了xml并且服务对数据做了一些处理。除了当我把开放的xml标签放在我的xml的最上面时,一切都很好。当我在调试模式下查看所有内容时,数据都会显示为空。将xml版本标签添加到xml并发布到wcf时,数据丢失了
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>[email protected]</email>
</mypost>
<?xml version="1.0"?>
<mypost>
<firstname>test</firstname>
<lastname>foo</lastname>
<email>[email protected]</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 version”标签,则数据会以空值显示。
有没有人遇到这样?真的可以使用一些建议。谢谢
答
我想通了。当使用DataContractSerializer时,顺序很重要,但如果您不指定顺序,默认情况下顺序是按字母顺序排列的,这就是为什么一些数据被设置而其他数据不是。
我真的不想要命令重要,所以我不得不从DataContractSerializer切换到另一个serlization引擎。 XmlSerializer的。
链接到一些信息,帮助我: WCF Disable Deserialization Order Sensitivity http://msdn.microsoft.com/en-us/library/ms732038.aspx
不知道这是否会无所谓,但你有没有试过装饰PassedIn用'[DataContract]'属性? – Tim 2012-07-27 19:24:24
你是不是已经离开那个部分了。我刚刚在那里编辑我的代码。 – user1096865 2012-07-27 19:27:11
如果您可以控制两端,请查看[ServiceStack](http://servicestack.net/)。 – 2012-07-27 23:57:49