将xml序列化成IList<User>如何实现?xml内容:
<ArrayOfUserInfo xmlns="http://schemas.datacontract.org/2004/07/Newegg.CustomerManagement.Services.DomainModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><UserInfo><FirstName>f0</FirstName><LastName>l0</LastName><Status>silver</Status><Id>0</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f4</FirstName><LastName>l4</LastName><Status>silver</Status><Id>4</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f1</FirstName><LastName>l1</LastName><Status>silver</Status><Id>1</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f2</FirstName><LastName>l2</LastName><Status>silver</Status><Id>2</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f3</FirstName><LastName>l3</LastName><Status>silver</Status><Id>3</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo></ArrayOfUserInfo>User类:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public MembershipStatus Status { get; set; }
public int Id { get; set; } //[DataMember]
//public Uri UserId { get; set; }
public DateTime LastModified { get; set; }
} public enum MembershipStatus
{
premium,
bronze,
silver,
gold
}
<ArrayOfUserInfo xmlns="http://schemas.datacontract.org/2004/07/Newegg.CustomerManagement.Services.DomainModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><UserInfo><FirstName>f0</FirstName><LastName>l0</LastName><Status>silver</Status><Id>0</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f4</FirstName><LastName>l4</LastName><Status>silver</Status><Id>4</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f1</FirstName><LastName>l1</LastName><Status>silver</Status><Id>1</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f2</FirstName><LastName>l2</LastName><Status>silver</Status><Id>2</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo><UserInfo><FirstName>f3</FirstName><LastName>l3</LastName><Status>silver</Status><Id>3</Id><LastModified>2011-04-04T17:25:19.2465668+08:00</LastModified></UserInfo></ArrayOfUserInfo>User类:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public MembershipStatus Status { get; set; }
public int Id { get; set; } //[DataMember]
//public Uri UserId { get; set; }
public DateTime LastModified { get; set; }
} public enum MembershipStatus
{
premium,
bronze,
silver,
gold
}
[XmlArrayItem("")] 或者把数据从XML中取出循环ADD到LIST中XML操作类
或者linq2XML
解析xml查找UserInfo元素列表,循环UserInfo列表给user赋值添加进list。
第一、改User为UserInfo
第二、如果第一个不能改动,就新建个UserInfo空白类,继承User
//User类改一下,然后反序列化后强制转换为List<UserInfo>
/// <summary>
/// xml反序列化
/// </summary>
/// <param name="type"></param>
/// <param name="content"></param>
/// <returns></returns>
public static object XmlDeseria(Type type, string content)
{
MemoryStream ms = null;
object obj = null; try
{
XmlSerializer xml = new XmlSerializer(type);
byte[] b = Encoding.UTF8.GetBytes(content);
ms = new MemoryStream(b);
ms.Seek(0, SeekOrigin.Begin);
obj = xml.Deserialize(ms);
}
catch
{
return null;
}
finally
{
if (ms != null)
{
ms.Close();
ms.Dispose();
}
}
return obj;
}
http://bonnibell.blog.sohu.com/65102568.html
人家这里边本来就是个ARRAYOFUSERINFO 接过来以后是数据你自己就是USER[]这样的形式比如你的代理类引用LIST<USER> LISTUSER=CLIENT.GETUSERINFO().TOLIST();
你要完成自己的对方的实体类转换成自己实体类,需要自己手动写代码!
//转换
public static T WebModelToDTO<T>(this WebReferenceEntity entity) where T : class
{
Type type = typeof(T);
T result = Activator.CreateInstance(type) as T;
if (entity == null)
return null;
if (result != null)
{
foreach (PropertyInfo item in type.GetProperties())
{
foreach (PropertyInfo property in entity.GetType().GetProperties())
{
if (property.GetValue(entity, null) == null)
{
continue;
} if (property.Name == item.Name)
{
object value = property.GetValue(entity, null);
item.SetValue(result, value, null);
continue;
}
}
}
}
return result;
}调用
list.Select(model => model.WebModelToDTO<USER>()).ToList();
我这个和你这个类似,修改一下就可以解决你的问题了,参考一下吧,
[Serializable]
public class User
{
... //不想序列化的属性上面加[NonSerializable]
}
类和属性的名字最好和XML中的相对应
否则需要你一个一个去指定[XmlElementAttribute("XML中的元素名字")]
然后利用用4楼的方法反序列化
public class User然后反序列化为你自己的实力集合就可以了,反序列化之后即可得到对象,不过你要注意的是,如果你接受的是数组类型的,那么你最好弄一个泛型类,继承LIST<USER>这样就可以了!