My last question was about getting the string representation of an object serialized to XML。其中一个响应者编写了一个扩展方法来封装序列化过程。
我现在的问题是,当传递IEnumerable<T>
对象时,如何使用扩展方法返回字符串数组,其中数组中的每个string
都是{的单独序列化元素{1}}。
提前致谢!
答案 0 :(得分:7)
回答你接下来的几个问题......
new XElement("people", myPeople.ToXElements());
public static class XmlTools
{
public static XElement ToXElement<T>(this T input)
{
return XElement.Parse(input.ToXmlString());
}
public static IEnumerable<XElement> ToXElements<T>(this IEnumerable<T> input)
{
foreach (var item in input)
yield return input.ToXElement();
}
public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> input)
{
foreach (var item in input)
yield return item.ToXmlString();
}
public static string ToXmlString<T>(this T input)
{
using (var writer = new StringWriter())
{
input.ToXml(writer);
return writer.ToString();
}
}
public static void ToXml<T>(this T objectToSerialize, Stream stream)
{
new XmlSerializer(typeof(T)).Serialize(stream, objectToSerialize);
}
public static void ToXml<T>(this T objectToSerialize, StringWriter writer)
{
new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize);
}
}
答案 1 :(得分:5)
使用链接中的代码示例,您可以添加其他类似的方法,或使用ToArray()方法将它们转换为数组。
public static class XmlTools
{
public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> inputs)
{
return inputs.Select(pArg => pArg.ToXmlString());
}
}
答案 2 :(得分:2)
我会编写扩展方法来生成新的IEnumerable而不是数组:
public static IEnumerable<string> XmlSerializeAll<T>(this IEnumerable<T> input)
{
foreach (T item in input)
{
yield return item.ToXmlString();
}
}
您可以使用
轻松获得所需的阵列var myArray = myEnumerable.XmlSerializeAll().ToArray();
这样,您可以增加一些灵活性。如果您愿意,可以生成List,或者使用无限长的枚举:)