繁体   English   中英

如何将对象序列化为XML

[英]How to serialize an object into XML

如何将.net对象序列化为XML,然后反序列化呢?

使用对象和字符串扩展方法可以做到这一点。

using System.IO;
using System.Xml.Serialization;

namespace XmlExtensionMethods
{

/// <summary>
/// Provides extension methods useful for XML Serialization and deserialization.
/// </summary>
public static class XMLExtensions
{
    /// <summary>
    /// Extension method that takes objects and serialized them.
    /// </summary>
    /// <typeparam name="T">The type of the object to be serialized.</typeparam>
    /// <param name="source">The object to be serialized.</param>
    /// <returns>A string that represents the serialized XML.</returns>
    public static string SerializeXML<T>(this T source) where T : class, new()
    {
        source.CheckNull("Object to be serialized.");

        var serializer = new XmlSerializer(typeof(T));
        using (var writer = new StringWriter())
        {
            serializer.Serialize(writer, source);
            return writer.ToString();
        }
    }


/// <summary>
    /// Extension method to string which attempts to deserialize XML with the same name as the source string.
    /// </summary>
    /// <typeparam name="T">The type which to be deserialized to.</typeparam>
    /// <param name="XML">The source string</param>
    /// <returns>The deserialized object, or null if unsuccessful.</returns>
    public static T DeserializeXML<T>(this string XML) where T : class, new()
    {
        XML.CheckNull("XML-string");

        var serializer = new XmlSerializer(typeof(T));
        using (var reader = new StringReader(XML))
        {
            try { return (T)serializer.Deserialize(reader); }
            catch { return null; } // Could not be deserialized to this type.
        }
    }
}

}
}

您可以这样使用它:

string savestring;

public void Save()
{
     savestring = mySerializableObject.SerializeXML<MySerializableClass>();
}

public void Load()
{
     mySerializableObject  = savestring.DeserializeXML<MySerializableClass>();
}

PS:我不相信这些扩展方法。

在VB.Net中,您首先需要向类中添加一些属性(如果需要)

Public Class Class1

    <XmlAttribute("value")>
    Public Property Value As String

    <XmlElement("name")>
    Public Property Name As String

End Class

然后使用序列化它

Dim p As New Class1()
p.Name = "test"
Dim sw1 = New StringWriter()
Dim xs1 As New XmlSerializer(GetType(Class1))
xs1.Serialize(New XmlTextWriter(sw1), p)
Console.WriteLine(sw1.ToString())

VB.NET

Public Shared Function SerializeObj(obj As Object) As String
    Dim xs As New System.Xml.Serialization.XmlSerializer(obj.GetType)
    Dim w As New IO.StringWriter
    xs.Serialize(w, obj)
    Return w.ToString
End Function

回头要复杂一点,您将声明一个xml文档并从中提取数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM