gpt4 book ai didi

c# - 如何将包含 ILIST 成员的对象序列化为 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 02:57:13 24 4
gpt4 key购买 nike

我正在尝试将一个对象(例如具有多个字段的用户)转换为 XML。问题是我在尝试序列化 ILIST 成员时遇到异常。以下是我使用的代码:

var stringwriter = new System.IO.StringWriter(); 
var serializer = new XmlSerializer(User.GetType()); <!-- Getting exception here -->
serializer.Serialize(stringwriter, User);
return stringwriter.ToString();

我的用户看起来像这样:

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; }
}

有没有一种方法可以检查我正在序列化其对象的类的成员是否可序列化,然后调整该特定成员的逻辑。我对用户类的控制较少。 :( 因此,我可以通过任何方式扩展我的代码来处理 IList 成员。

最佳答案

旧式 XML 序列化无法处理接口(interface) - 它需要具体类型。

但是,您可以使用较新的 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();
}
}
}

关于c# - 如何将包含 ILIST 成员的对象序列化为 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com