得到对象实例的公共可序列化属性:并包装在csv 字符串中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
namespace John.Research.CSharp.AssemblyRes
{
public class PropertiesReflector
{
public string GetPropertiesByObject<T>(T obj)
{
Type myType = obj.GetType();
XmlSerializer xmlSerializer = new XmlSerializer(myType);
MemoryStream ms = new MemoryStream();
xmlSerializer.Serialize(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
string TSer = sr.ReadToEnd();
ms.Close();
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(TSer);
XmlNode rootNode = xdoc.SelectSingleNode(myType.Name);
StringBuilder sb = new StringBuilder();
foreach (XmlNode node in rootNode.ChildNodes)
{
if (sb.Length == 0)
{
sb.Append(node.Name + ":" + node.InnerText);
}
else
{
sb.Append("," + node.Name + ":" + node.InnerText);
}
}
return sb.ToString();
}
}
}
对象:
[Serializable]
public class Manager
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
private string job;
public string Job
{
get { return job; }
set { job = value; }
}
public Manager()
{
}
public Manager(string name, string title, string job)
{
this.Name = name;
this.Title = title;
this.Job = job;
}
}
测试方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace John.Research.CSharp.AssemblyRes
{
class Program
{
static void Main(string[] args)
{
PropertiesReflector myrref = new PropertiesReflector();
List<Manager> list = new List<Manager>();
for (int i = 0; i < 5; i++)
{
Manager m = new Manager("man" + i, "title" + i, "job");
list.Add(m);
}
for (int i = 0; i < list.Count; i++)
{
Manager ma = list[i];
string maStr = myrref.GetPropertiesByObject<Manager>(ma);
Console.WriteLine(maStr);
}
Console.Read();
}
}
}
显示结果: