将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”标签,则数据会以空值显示。

有没有人遇到这样?真的可以使用一些建议。谢谢

+0

不知道这是否会无所谓,但你有没有试过装饰PassedIn用'[DataContract]'属性? – Tim 2012-07-27 19:24:24

+0

你是不是已经离开那个部分了。我刚刚在那里编辑我的代码。 – user1096865 2012-07-27 19:27:11

+0

如果您可以控制两端,请查看[ServiceStack](http://servicestack.net/)。 – 2012-07-27 23:57:49

我想通了。当使用DataContractSerializer时,顺序很重要,但如果您不指定顺序,默认情况下顺序是按字母顺序排列的,这就是为什么一些数据被设置而其他数据不是。

我真的不想要命令重要,所以我不得不从DataContractSerializer切换到另一个serlization引擎。 XmlSerializer的。

链接到一些信息,帮助我: WCF Disable Deserialization Order Sensitivity http://msdn.microsoft.com/en-us/library/ms732038.aspx