0

.xmlファイルをカスタム calss に逆シリアル化し、そのデータに対していくつかの操作を行うWCF サービスを作成する必要があります。コンソールを使用するが WCF を使用しないこのアプリケーションのテスト バージョンを作成しました。私のコードは次のようになります。

[Serializable]
public class ErrorMsgElement
{
    [XmlElement("Sender")]
    public string SenderOfMessage{ get; set; }

    [XmlElement()]
    public Int64 UserID { get; set; }

    [XmlElement()]
    public Int64 SerialNumber { get; set; }

    [XmlElement("DateTime")]
    public DateTime DateAndTimeOfMessage { get; set; }
}


[Serializable]
[XmlRoot("Root")]
public class ErrorMessage
{
    [XmlElement("Header")]
    public string HeaderOfFile { get; set; }

    [XmlElement("ErrorMsg")]
    public ErrorMsgElement msgElent { get; set; }
}

そしてメインコード

        ErrorMessage myErrorMsg = new ErrorMessage();
        //pathToFile is original path
        string path = @pathToFile;

        XmlSerializer myXmlSerializer = new XmlSerializer(typeof(ErrorMessage));

        using (StreamReader myStrReader = new StreamReader(path))
        {
            myErrorMsg = (ErrorMessage)myXmlSerializer.Deserialize(myStrReader);
        }

        //some operations on myErrorMsg such as writing to database

コンソールアプリケーションでは問題なく動作します。ここで、WCF サービスに同じロジックを記述する必要があります。しかし、 [Serializable][DataContact][MessageContract]など、何を使用すればよいかわかりません。カスタム クラスにもいくつかの [XmlArray] 属性があるとします。[DataContract] 属性をErrorMessageクラスに追加する場合、次のように同じ属性をErrorMsgElementに追加する必要がありますか?

[DataContract]
[Serializable]
public class ErrorMsgElement
{
    ...
}

[DataContract]
[Serializable]
[XmlRoot("Root")]
public class ErrorMessage
{
    ...

    [DataMember]
    [XmlElement("ErrorMsg")]
    public ErrorMsgElement msgElent { get; set; }
}

すべての回答は大歓迎です。前もって感謝します。

4

1 に答える 1

1

wcf[DataContact]DataContractSerializer、何をしたいのかをお勧めします。しかし、XmlSerializerそれは実際にはあなたの選択だけです(最初または2番目を使用しても、アプリケーションのパフォーマンスに違いはありません)。

編集:

属性を追加DataContractする必要がないよりもクラスに属性を追加する場合Serializable、同じクラスDataContractは次のようになりますSerializable

ネストされた DataContractsに関する回答については、これを確認してください

于 2012-06-25T06:59:33.900 に答える