2012-07-27 14 views
1

好吧,我真的迷失在這一張上。我創建了一個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

回答

1

我想通了。當使用DataContractSerializer時,順序很重要,但如果您不指定順序,默認情況下順序是按字母順序排列的,這就是爲什麼一些數據被設置而其他數據不是。

我真的不想要命令重要,所以我不得不從DataContractSerializer切換到另一個serlization引擎。 XmlSerializer的。

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