【发布时间】:2011-06-28 20:42:49
【问题描述】:
在阅读了许多似乎过时或似乎不太有效的代码后,我花了几个小时整理了以下代码。
如果它对这里的任何人有任何帮助,那就是最终的工作代码。如果可以改进,请免费评论:-)
public class SerializationHelper<T> {
#region static string SerializeObject( T obj, Encoding encoding )
/// <summary>
/// Serialize an [object] to an Xml String.
/// </summary>
/// <typeparam name="T">Object Type to Serialize</typeparam>
/// <param name="obj">Object Type to Serialize</param>
/// <param name="encoding">System.Text.Encoding Type</param>
/// <returns>Empty.String if Exception, XML string if successful</returns>
/// <example>
/// // UTF-16 Serialize
/// string xml = SerializationHelper<ObjectType>SerializeObject( [object], new UnicodeEncoding( false, false ) );
/// </example>
/// <example>
/// // UTF-8 Serialize
/// string xml = SerializationHelper<ObjectType>SerializeObject( [object], Encoding.UTF8 );
/// </example>
public static string SerializeObject( T obj, Encoding encoding ) {
if ( obj == null ) { return string.Empty; }
try {
XmlSerializer xmlSerializer = new XmlSerializer( typeof( T ) );
using ( MemoryStream memoryStream = new MemoryStream() ) {
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings() { Encoding = encoding };
using ( XmlWriter writer = XmlWriter.Create( memoryStream, xmlWriterSettings ) ) {
xmlSerializer.Serialize( writer, obj );
}
return encoding.GetString( memoryStream.ToArray() );
}
}
catch {
return string.Empty;
}
}
#endregion
#region static T DeserializeObject( string xml, Encoding encoding )
/// <summary>
/// Deserialize an Xml String to an [object]
/// </summary>
/// <typeparam name="T">Object Type to Deserialize</typeparam>
/// <param name="xml">Xml String to Deserialize</param>
/// <param name="encoding">System.Text.Encoding Type</param>
/// <returns>Default if Exception, Deserialize object if successful</returns>
/// <example>
/// // UTF-16 Deserialize
/// [object] = SerializationHelper<ObjectType>DeserializeObject( xml, Encoding.Unicode )
/// </example>
/// <example>
/// // UTF-8 Deserialize
/// [object] = SerializationHelper<ObjectType>DeserializeObject( xml, Encoding.UTF8 )
/// </example>
public static T DeserializeObject( string xml, Encoding encoding ) {
if ( string.IsNullOrEmpty( xml ) ) { return default( T ); }
try {
XmlSerializer xmlSerializer = new XmlSerializer( typeof( T ) );
using ( MemoryStream memoryStream = new MemoryStream( encoding.GetBytes( xml ) ) ) {
// No settings need modifying here
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
using ( XmlReader xmlReader = XmlReader.Create( memoryStream, xmlReaderSettings ) ) {
return (T)xmlSerializer.Deserialize( xmlReader );
}
}
}
catch {
return default( T );
}
}
#endregion
}
【问题讨论】:
-
好的,这就是代码 - 那么你的问题是什么?!?!您是否收到错误 - 如果是:what 错误?代码没有按照您的预期执行吗?如果是这样:你期望什么,你会得到什么?阅读how to ask a good question on SO
-
与其说是一个问题,不如说是一个概述,看看它是否正确以及是否可以改进。在阅读了很多谷歌之后,我遇到了许多不同版本的代码,正如我所说,大多数都使用过时的方法,有些显然不起作用。我还注意到,在这里,尤其是很多人输入答案,例如“我刚刚从我的脑海中输入了这个,它可能会起作用我不确定,但你明白了”这是一个很好的姿态,但有时在这里找到代码不是很好实际可行,经过测试并被其他人认为是最佳实践,同时添加输入。
标签: c# serialization xmlreader xmlwriter