Ros*_*per 2 c# xml serialization
我试图转换一个对象说用户有多个字段到XML.问题是我在尝试序列化ILIST成员时遇到异常.以下是我使用的代码:
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(User.GetType()); <!-- Getting exception here -->
serializer.Serialize(stringwriter, User);
return stringwriter.ToString();
Run Code Online (Sandbox Code Playgroud)
我的用户看起来像这样:
class User
{ public virtual string Name{ get; set; }
public virtual DateTime? LastUpdated { get; set; }
public virtual int? ContactId { get; set; }
public virtual IList<Sector> Sectors { get; set; }
public virtual AccessLevel AccessLevel { get; set; }
public virtual IList<UserRole> UserRole { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以检查我正在序列化的对象的类成员是否可序列化,然后调整该特定成员的逻辑.我对用户类的控制较少.:(所以任何方式,我可以扩展我的代码来处理IList成员将是首选.
旧式XML序列化无法处理接口 - 它需要具体类型.
但是,您可以使用较新版本DataContractSerializer.
以下是基于您的代码的示例:
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Xml;
namespace Demo
{
[DataContract(Namespace = "")]
public class User
{
[DataMember]
public virtual string Name
{
get;
set;
}
[DataMember]
public virtual DateTime? LastUpdated
{
get;
set;
}
[DataMember]
public virtual int? ContactId
{
get;
set;
}
[DataMember]
public virtual IList<string> Sectors
{
get;
set;
}
}
internal class Program
{
private void run()
{
User user = new User();
user.Sectors = new[] {"One", "Two", "Three"};
user.Name = "Test Name";
// Serialize
var result = new StringBuilder();
DataContractSerializer serializer = new DataContractSerializer(user.GetType());
using (var stringWriter = new StringWriter(result))
using (var xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings { Indent = true } ))
{
serializer.WriteObject(xmlWriter, user);
}
string serialisedToString = result.ToString();
Console.WriteLine(serialisedToString);
// Deserialize
using (var stringReader = new StringReader(serialisedToString))
using (var xmlReader = XmlReader.Create(stringReader))
{
user = (User) serializer.ReadObject(xmlReader);
}
Console.WriteLine(user.Name);
}
private static void Main()
{
new Program().run();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2937 次 |
| 最近记录: |