如何在C#中将对象映射到现有的XML文件
本文关键字:文件 XML 映射 对象 | 更新日期: 2023-09-27 18:21:23
我有一个现有的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; }
}
目的是:
- 对
var cd = new Cd();
对象的属性设置值 - 获取现有的XML文件(模板),然后传递其中的值(例如将对象映射到现有的XML)
- 将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;}
}
这里是序列化和取消实现的帮助程序:
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