2017-04-25 4 views
1

XmlSerializerを使用してXMLファイルを逆シリアル化しようとしています。しかし、私はこの例外が発生しています:XML文書(1,41)にエラーがあります.InnerExceptionメッセージ "ReplicationStatus xmlns = 'DistributionServices'は期待されていませんでした。XMLSerializerを使用してXMLを逆シリアル化する

<?xml version="1.0" encoding="UTF-8" ?> 
<ts:Status xmlns:ts="DistributionServices"> 
<Server>DUMMY</Server> 
<Object>DUMMY</Object> 
<Port>123</Port> 
<Code>DUMMY</Code> 
<Key>b0ed5e56</Key> 
</ts:Status> 

次のように私が使用しているコードは次のとおりです:

XMLファイルは次のようになります。ここ

MessageData data = new MessageData(); 
XmlSerializer xmlSerializer = new XmlSerializer(data.GetType()); 
data = (MessageData)xmlSerializer.Deserialize(new StringReader(msgData)); 

、msgDataは、上記のようなXMLを含む文字列です。 のMessageDataクラスには、次のようになります。

[Serializable,XmlType("Status")] 
public class MessageData 
{ 
    [XmlElement("Server")] 
    public string Server { get; set; } 

    [XmlElement("Object")] 
    public string Object { get; set; } 

    [XmlElement("Port")] 
    public string Port { get; set; } 

    [XmlElement("Code")] 
    public string Code { get; set; } 

    [XmlElement("Key")] 
    public string Key { get; set; } 
} 

私は私が間違っているのか知っている聞かせください。

答えて

1

クラスの名前空間を宣言し、プロパティで空にする必要があります。クラスのモデルをこれに変更しても問題ありません。

[Serializable, XmlRoot("Status", Namespace = "DistributionServices")] 
public class MessageData 
{ 
    [XmlElement(Namespace = "")] 
    public string Server { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Object { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Port { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Code { get; set; } 

    [XmlElement(Namespace = "")] 
    public string Key { get; set; } 
} 

ところで:あなたは、彼らがプロパティと同じ名前を持つ場合XmlElementさん明示的に名前を付ける必要はありません。

+1

これは機能しました。 ありがとう:) –

関連する問題