簡體   English   中英

如何將對象映射到C#.NET中的現有XML文件?

[英]How to map an object to an existing XML file in C# .NET?

我有這個現有的XML文件作為模板,沒有數據,只是簡單的節點......這是一個示例:

<?xml version="1.0" encoding="utf-8" ?>
<catalog>
  <cd>
    <title />
    <artist />
    <country />
    <company />
    <price />
    <year />
  </cd>
</catalog>

現在我為它創建了一個類似的類。

public class Cd
    {
        public string Title { get; set; }
        public string Artist { get; set; }
        public string Country { get; set; }
        public string Company { get; set; }
        public string Price { get; set; }
        public string Year { get; set; }
    }

目的是這樣的:

  1. 將值放在var cd = new Cd();的屬性上var cd = new Cd(); 賓語
  2. 獲取現有XML文件(模板),然后傳遞其中的值(如將對象映射到現有XML)
  3. 將XML模板(帶有值)轉換為XSLT以成為HTML

我認為就是這樣。

如何正確地做到這一點? 非常感謝!

您可以使用序列化來實現(1)和(2)

[Serializable]
    public class Cd
    {

        public string Title { get; set; }

        public string Artist { get; set; }       
        public string Country { get; set; }

        public string Company { get; set; }

        public string Price { get; set; }

        public string Year { get; set; }
    }

現在為了從對象創建一個xml使用:

    public static string SerializeObject<T>(this T obj)
    {
        var ms = new MemoryStream();
        var xs = new XmlSerializer(obj.GetType());
        var xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, obj);
        string serializedObject = new UTF8Encoding().GetString((((MemoryStream)xmlTextWriter.BaseStream).ToArray()));
        return serializedObject;

    }

為了從XML創建對象使用:

public static T DeserializeObject<T>(this string xml)
    {
        if (xml == null)
            throw new ArgumentNullException("xml");
        var xs = new XmlSerializer(typeof(T));
        var ms = new MemoryStream(new UTF8Encoding().GetBytes(xml));
        try
        {
            new XmlTextWriter(ms, Encoding.UTF8);
            return (T)xs.Deserialize(ms);
        }
        catch
        {
            return default(T);
        }
        finally
        {
            ms.Close();
        }
    }

我會創建課程:

class catalog
{
    public CD cd {get;set;}
}

這是序列化和deserealization幫助器:

public class Xml
{
    public static string Serialize<T>(T value) where T : class
    {
        if (value == null)
        {
            return string.Empty;
        }
        var xmlSerializer = new XmlSerializer(typeof(T));
        var stringWriter = new StringWriter();
        using (var xmlWriter = XmlWriter.Create(stringWriter))
        {
            xmlSerializer.Serialize(xmlWriter, value);
            return stringWriter.ToString();
        }
    }

    public static T Deserialize<T>(string xml)
    {
        var serializer = new XmlSerializer(typeof(T));
        T result;

        using (TextReader reader = new StringReader(xml))
        {
            result = (T) serializer.Deserialize(reader);
        }

        return result;
    }
}

只需致電:

catalog catalogObject = Xml.Deserialize<catalog>(xmlCatalogString);

我懷疑你還需要在XmlElement(ElementName =“title”)等屬性上放置一些屬性,因為它區分大小寫。

MSDN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM