1
namespace MvcAppTest.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
string sql = "select a.* ,(select UserName,Password, Error from T_UserLogin where LoginId=a.LoginId for xml auto, type, elements) as UserInfoXML from T_UserInfo a ";
List<T_UserInfo> list = SqlHelper.ExecuteClass<T_UserInfo>(sql, null);
//经过sql语句查询后UserInfoXML字段的值为:
// <T_UserLogin><UserName>无盐海</UserName><Password>123456</Password><Error>1</Error></T_UserLogin>
//将XML格式的字符串转换成对象(特别要注意<T_UserLogin>要与目标类名称一致)
var objList = HomeController.XMLToObject<T_UserLogin>(list.First().UserInfoXML, Encoding.UTF8);
var name = objList.UserName;
return View();
}
/// <summary>
/// 将object对象序列化成XML
/// </summary>
/// <typeparam name="T">需要序列化的对象</typeparam>
/// <param name="encoding">如果序列化出错,可以尝试修改下encoding的值试试</param>
/// <returns></returns>
public static string ObjectToXML<T>(T t, Encoding encoding)
{
XmlSerializer ser = new XmlSerializer(t.GetType());
using (MemoryStream mem = new MemoryStream())
{
using (XmlTextWriter writer = new XmlTextWriter(mem, encoding))
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
ser.Serialize(writer, t, ns);
return encoding.GetString(mem.ToArray()).Trim();
}
}
}
/// <summary>
/// 将XML反序列化成对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source">需要序列化的XML字符串</param>
/// <param name="encoding">如果序列化出错,可以尝试修改下encoding的值试试</param>
/// <returns></returns>
public static T XMLToObject<T>(string source, Encoding encoding)
{
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(encoding.GetBytes(source)))
{
return (T)mySerializer.Deserialize(stream);
}
}
}
}
namespace MvcAppTest.DAL
{
[Serializable]
public class T_UserInfo
{
public int Id { get; set; }
public string UserName { get; set; }
public int Age { get; set; }
public string UserInfoXML { get; set; }
}
[Serializable]
public class T_UserLogin
{
public string UserName { get; set; }
public string Password { get; set; }
public int Error { get; set; }
}
}