gpt4 book ai didi

c# - xml 用它的泛型类型序列化一个泛型类

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

我需要将包含 Pair<T,U> 类型对象的列表序列化为 xml .除了这些值,我还需要序列化它的泛型类型(TU 的类型)。

首先,我创建了一个类 PairList 来保存对的列表,然后我创建了代表两个值对(键和值)的实际类。

 [XmlRoot("pairList")]
public class PairList<T,U>{
[XmlElement("element")]
public List<Pair<T,U>> list;
public PairList()
{
list = new List<Pair<T, U>>();
}

}
public class Pair<T, U>
{
[XmlAttribute("key")]
public T key;
[XmlAttribute("value")]
public U value;
[XmlAttribute("T-Type")]
public Type ttype;
[XmlAttribute("U-Type")]
public Type utype;

public Pair()
{
}
public Pair(T t, U u)
{
key = t;
value = u;
ttype = typeof(T);
utype = typeof(U);
}
}

然后,我尝试序列化它:

 PairList<string,int> myList = new PairList<string,int>();
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
try
{
XmlSerializer serializer = new XmlSerializer(typeof(PairList<string, int>));
TextWriter tw = new StreamWriter("list.xml");
serializer.Serialize(tw, myList);
tw.Close();
}
catch (Exception xe)
{
MessageBox.Show(xe.Message);
}

不幸的是我遇到了一个异常(exception):There was an error reflecting type: PairList[System.String,System.Int32] .欢迎任何关于如何避免此异常和序列化该类的想法。

如果我选择不序列化 ttypeutype字段(通过使它们 protected 或私有(private))序列化有效。我不明白为什么它不想序列化 Type字段。

最佳答案

改变你的类(class)为

public class Pair<T, U>
{
[XmlAttribute("key")]
public T key;
[XmlAttribute("value")]
public U value;
[XmlAttribute("T-Type")]
public string ttype;
[XmlAttribute("U-Type")]
public string utype;

public Pair()
{
}
public Pair(T t, U u)
{
key = t;
value = u;
ttype = typeof(T).ToString();
utype = typeof(U).ToString();
}
}

它应该可以工作。您不能使用 Xmlserializer 序列化/反序列化 Type。(例如,假设 T 是在外部程序集中定义的复杂对象,并且此程序集不在您要反序列化的计算机上不存在)

关于c# - xml 用它的泛型类型序列化一个泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011633/

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