我需要编写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; }
}
所有答案都非常感谢。提前谢谢。
答案 0 :(得分:1)
[DataContact]
和DataContractSerializer
中的建议你做什么。但你也可以使用XmlSerializer
,这只是你的选择(使用第一个或第二个不会使你的应用程序性能不同)。
修改强>
当您向班级添加DataContract
属性时,您不必添加Serializable
属性,同一班级DataContract
等于Serializable
选中此处以获取有关nested DataContracts
的答案