public Serialize ( object obj ) : string | ||
obj | object | Object to serialize |
Résultat | string |
public string Serialize(object obj)
{
var doc = new XDocument();
var t = obj.GetType();
var name = t.Name;
var options = t.GetAttribute<SerializeAsAttribute>();
if (options != null) {
name = options.TransformName(options.Name ?? name);
}
var root = new XElement(name.AsNamespaced(Namespace));
if (obj is IList)
{
var itemTypeName = "";
foreach (var item in (IList)obj)
{
var type = item.GetType();
var opts = type.GetAttribute<SerializeAsAttribute>();
if (opts != null)
{
itemTypeName = opts.TransformName(opts.Name ?? name);
}
if (itemTypeName == "")
{
itemTypeName = type.Name;
}
var instance = new XElement(itemTypeName);
Map(instance, item);
root.Add(instance);
}
}
else
Map(root, obj);
if (RootElement.HasValue()) {
var wrapper = new XElement(RootElement.AsNamespaced(Namespace), root);
doc.Add(wrapper);
}
else {
doc.Add(root);
}
return doc.ToString();
}
public void Can_serialize_simple_POCO_With_Attribute_Options_Defined() { var poco = new WackyPerson { Name = "Foo", Age = 50, Price = 19.95m, StartDate = new DateTime(2009, 12, 18, 10, 2, 23) }; var xml = new XmlSerializer(); var doc = xml.Serialize(poco); var expected = GetSimplePocoXDocWackyNames(); Assert.Equal(expected.ToString(), doc.ToString()); }