XMLserialize对象的列表和字符串
所以我需要xml序列化一个对象的通用列表,其中对象由另一个列表和一个字符串组成。XMLserialize对象的列表和字符串
这就是我现在得到
<?xml version="1.0" encoding="UTF-8"?>
-<ArrayOfRecept xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<Recept>
<Namn>Nomnom</Namn>
</Recept>
-<Recept>
<Namn>Ännu mer nomnom</Namn>
</Recept>
</ArrayOfRecept>
这里只字符串值是序列化,而不是我的列表
这是我的目标,我要序列
public class Recept
{
private ListHanterare<string> ingredienser;
private string namn;
public Recept()
{
ingredienser = new ListHanterare<string>();
}
public ListHanterare<string> Ingredienser
{
get { return ingredienser; }
}
public string Namn
{
get { return namn; }
set { namn = value; }
}
}
所以我将有一个我想要xml序列化的Recept列表,并且我希望xml显示“Namn”和“Ingredienser”列表。
这是我的串行
class XMLSerial
{
public static bool Serialize<T>(T obj, string filePath)
{
bool bok = true;
XmlSerializer serializer = new XmlSerializer(typeof(T));
TextWriter writer = new StreamWriter(filePath);
try
{
serializer.Serialize(writer, obj);
}
catch
{
bok = false;
}
finally
{
if (writer != null)
writer.Close();
}
return bok;
}
}
这是ListHanterare类,我的对象传递给串行内
public bool XMLSerialize(string filePath){
return XMLSerial.Serialize<List<T>>(lista, filePath);
编辑: 所以通过添加二传手到ingredienser现在我得到这个
-<Recept>
<Ingredienser/>
<Namn>rec</Namn>
</Recept>
但ingredienser仍然是空的 我ListHanterare类是基本泛型列表类
public class ListHanterare<T> : IListHanterare<T>
{
private List<T> lista; // This is the list
private int count;
public ListHanterare()
{
lista = new List<T>();
}
所以我需要序列招待的ListHanterare对象列表,其中招待对象由一个字符串,字符串的另一ListHanterare列表,字符串正确但不连载字符串列表。
为了XmlSerializer
序列化或反序列化Recept
类的属性Ingredienser
,它必须有一个公共的setter以及一个公共的getter:
public ListHanterare<string> Ingredienser
{
get { return ingredienser; }
set { ingredienser = value; }
}
如果你不这样做,将XmlSerializer
忽略财产。
您可能仍然遇到类ListHanterare
的问题,但未在您的问题中显示。
DataContractSerializer
没有此要求。但是,要使用DataContractSerializer
序列化和反序列化您的类并包含私有字段或属性,则需要使用data contract attributes完全注释它们。私人领域和标有[DataMember]
的财产尽管是私人的,但会被序列化。数据合同序列号是opt-in,但是,要使用此功能,您的类需要完全归属。
更新
你不显示您的ListHanterare<string>
类的完整代码。为了XmlSerializer
序列化和成功反序列化,它必须是:XmlSerializer Class:这里所描述
- 使公众可设置和gettable性能提供其所有内容,还是
- 实现
ICollection<T>
(甚至IList<T>
)。
对于方法#1,你可以修改你的类,如下所示:
public class ListHanterare<T>
{
private List<T> lista; // This is the list
private int count;
public ListHanterare()
{
lista = new List<T>();
}
[XmlElement("Item")]
public T[] SerializableList
{
get
{
return (lista == null ? new T [0] : lista.ToArray());
}
set
{
if (lista == null)
lista = new List<T>();
lista.Clear();
lista.AddRange(value ?? Enumerable.Empty<T>());
count = lista.Count;
}
}
}
现在,您将看到的物品序列化的XML。
通过给它一个二传手给了我这个结果
@ user3621898 - 你的ListHanterare类是什么样的?如果其内容未被序列化,则问题可能在那里。 – dbc 2015-04-05 14:43:50
@ user3621898 - 可能你的'ListHanterare'没有'XmlSerializer'所需的公共可设置的属性 - 但我不能肯定地说。你可以显示ListHanterare的完整代码吗? – dbc 2015-04-05 18:56:13
将XML元素添加到您的Recept类中,以便序列化程序知道要反序列化的内容。此外,你不是反序列化你的元素,你只是流,并返回值为真 - 布尔。你没有回报任何错误或真实的东西。 – Aizen 2015-04-05 00:28:25
我在我的类声明上面有一个[Serializable] – user3621898 2015-04-05 12:30:59
''''[Serializable]'用于二进制格式化而不是'XmlSerializer'。 – dbc 2015-04-05 18:56:31