c# - 尝试在 C# 中序列化和反序列化实体对象

标签 c# .net entity-framework serialization

我正在使用以下两种方法来序列化/反序列化 Entity Framework 对象(版本 4.0)。 我尝试了几种方法来实现这一点,但没有成功。序列化工作正常。我得到了很好的 xml 格式的字符串,但是当我尝试反序列化时,我在 XML 中遇到错误。这怎么可能?

谢谢。

    public static string SerializeObject(Object obj)
    {
        XmlSerializer ser = new XmlSerializer(obj.GetType());
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        System.IO.StringWriter writer = new System.IO.StringWriter(sb);
        ser.Serialize(writer, obj);
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(sb.ToString());
        string xml = doc.InnerXml;
        return xml;
    }
    public static object DeSerializeAnObject(string xml, Type objType)
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement);
        XmlSerializer ser = new XmlSerializer(objType);
        object obj = ser.Deserialize(reader);
        return obj;
    }

最佳答案

我使用泛型方法来序列化和反序列化:

/// <summary>
/// Serializes an object to Xml as a string.
/// </summary>
/// <typeparam name="T">Datatype T.</typeparam>
/// <param name="ToSerialize">Object of type T to be serialized.</param>
/// <returns>Xml string of serialized type T object.</returns>
public static string SerializeToXmlString<T>(T ToSerialize)
{
    string xmlstream = String.Empty;

    using (MemoryStream memstream = new MemoryStream())
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        XmlTextWriter xmlWriter = new XmlTextWriter(memstream, Encoding.UTF8);

        xmlSerializer.Serialize(xmlWriter, ToSerialize);
        xmlstream = UTF8ByteArrayToString(((MemoryStream)xmlWriter.BaseStream).ToArray());
    }

    return xmlstream;
}

/// <summary>
/// Deserializes Xml string of type T.
/// </summary>
/// <typeparam name="T">Datatype T.</typeparam>
/// <param name="XmlString">Input Xml string from which to read.</param>
/// <returns>Returns rehydrated object of type T.</returns>
public static T DeserializeXmlString<T>(string XmlString)
{
    T tempObject = default(T);

    using (MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(XmlString)))
    {
        XmlSerializer xs = new XmlSerializer(typeof(T));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

        tempObject = (T)xs.Deserialize(memoryStream);
    }

    return tempObject;
} 

// Convert Array to String
public static String UTF8ByteArrayToString(Byte[] ArrBytes)
{ return new UTF8Encoding().GetString(ArrBytes); }
// Convert String to Array
public static Byte[] StringToUTF8ByteArray(String XmlString)
{ return new UTF8Encoding().GetBytes(XmlString); }

关于c# - 尝试在 C# 中序列化和反序列化实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541543/

相关文章:

c# - 无法将类型 'Newtonsoft.Json.Linq.JToken' 隐式转换为 'string' 。存在显式转换(您是否缺少转换?)

c# - 如何避免 SerializationException : Type is not resolved for member XXX when testing a component that uses the LogicalCallContext

c# - 使用简单注入(inject)器注册多个DbContext

c# - 使用 C# 中的代码隐藏按钮单击时创建 Javascript 警报

C# PInvoke 通过 Win32 API 获取文件和文件夹的 ACL

c# - URL 用 + 号替换空格

c# - 为什么我的对象不为空

c# - 代码优先模型映射

c# - 使用 .NET 2.0 解压缩文件

C# - 在 XX 秒后停止线程