我从一个XSD文件中的工具xsd.exe中获得了一个名为WebserviceType
的类。
现在我想将一个WebServiceType
对象的实例反序列化为一个字符串。我该怎么做呢?
MethodCheckType
对象有一个WebServiceType
数组作为参数。
我的第一次尝试就像我序列化它一样:使用一个XmlSerializer
和一个StringWriter
(在序列化时我使用了StringReader
)。
这是我序列化WebServiceType
对象的方法:
XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType));
MethodCheckType output = null;
StringReader reader = null;
// catch global exception, logg it and throw it
try
{
reader = new StringReader(path);
output = (MethodCheckType)serializer.Deserialize(reader);
}
catch (Exception)
{
throw;
}
finally
{
reader.Dispose();
}
return output.WebService;
编辑:
也许我可以换一种说法:我得到了这个MethodCheckType
对象的一个实例,另一方面,我得到了从中序列化这个对象的XML文档。现在我想把这个实例转换成一个字符串形式的XML文档。在此之后,我必须证明这两个字符串( XML文档)是否相同。我必须这样做,因为我对第一种方法进行了单元测试,在第一种方法中,我将XML文档读入StringReader
并将其序列化为MethodCheckType
对象。
发布于 2012-07-12 16:56:37
下面是两种方法的转换方法。this =您的类的实例
public string ToXML()
{
using(var stringwriter = new System.IO.StringWriter())
{
var serializer = new XmlSerializer(this.GetType());
serializer.Serialize(stringwriter, this);
return stringwriter.ToString();
}
}
public static YourClass LoadFromXMLString(string xmlText)
{
using(var stringReader = new System.IO.StringReader(xmlText))
{
var serializer = new XmlSerializer(typeof(YourClass ));
return serializer.Deserialize(stringReader) as YourClass ;
}
}
发布于 2014-02-11 02:31:15
我意识到这是一个非常古老的帖子,但在看了L.B的回复后,我思考了如何改进公认的答案,并使其适用于我自己的应用程序。这是我想出来的:
public static string Serialize<T>(T dataToSerialize)
{
try
{
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stringwriter, dataToSerialize);
return stringwriter.ToString();
}
catch
{
throw;
}
}
public static T Deserialize<T>(string xmlText)
{
try
{
var stringReader = new System.IO.StringReader(xmlText);
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(stringReader);
}
catch
{
throw;
}
}
这些方法现在可以放在静态帮助器类中,这意味着每个需要序列化的类都不会有重复的代码。
发布于 2014-04-14 19:49:35
public static string Serialize(object dataToSerialize)
{
if(dataToSerialize==null) return null;
using (StringWriter stringwriter = new System.IO.StringWriter())
{
var serializer = new XmlSerializer(dataToSerialize.GetType());
serializer.Serialize(stringwriter, dataToSerialize);
return stringwriter.ToString();
}
}
public static T Deserialize<T>(string xmlText)
{
if(String.IsNullOrWhiteSpace(xmlText)) return default(T);
using (StringReader stringReader = new System.IO.StringReader(xmlText))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(stringReader);
}
}
https://stackoverflow.com/questions/11447529
复制相似问题