0

我需要编写 WCF 服务,它将.xml文件反序列化到我的自定义 calss 中,然后对该数据执行一些操作。我已经编写了这个应用程序的测试版本,它使用控制台而不是 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它,这实际上只是您的选择(使用第一个或第二个不会影响您的应用程序的性能)。

编辑:

当您向DataContract您的类添加属性时,您不必添加Serializable属性也相同的类DataContract等于Serializable

检查此以获取有关嵌套 DataContracts的答案

于 2012-06-25T06:59:33.900 回答