C# C序列化-具有其他类列表的类
我对序列化有一些问题。假设我有这样的课:C# C序列化-具有其他类列表的类,c#,serialization,C#,Serialization,我对序列化有一些问题。假设我有这样的课: Class Hardware { public string cpu_name; public int ram_size; List<HardDisk> hd; Class HardDisk{ public string model; public int size;} } 获得结果的最简单方法是: <HardwareInfo> <cpu_name> ABC Pentium xyz</cpu_name>
Class Hardware
{
public string cpu_name;
public int ram_size;
List<HardDisk> hd;
Class HardDisk{ public string model; public int size;}
}
获得结果的最简单方法是:
<HardwareInfo>
<cpu_name> ABC Pentium xyz</cpu_name>
<ram_size> 123 </ram_size>
<hard_disk>
<model>Toshiba XYZ</model>
<size> 123 GB </size>
</hard_disk>
<hard_disk>
<model>Logitech XYZ</model>
<size> 99 GB </size>
</hard_disk>
</HardwareInfo>
我已经生成了我自己的metod,只是为了添加标记,看起来我已经编写了,但是如果我使用这个,我还必须编写我的反序列化方法
那么,您能告诉我如何简单地用XML序列化吗
p、 美国。
我读过一些和我类似的问题,但我不太明白。我的英语不太好:如果您使用C,您的代码会出现一些问题。我已经做了一些更正,并包含了一些程序集信息,以获得您期望的结果。请参阅下面的代码 以下是您的课程应该如何: 要使用预期结果进行序列化的代码,例如: 您的结果将是:
您应该使用此示例代码 重要的音符 序列化类标记为[Serializable]attirbute 如果类名与xml根标记不同,则类将标记为[XmlRootElementName=XmlTagName]属性 如果序列化类的属性类型为另一个类,则此属性标记为[XmlElementXmlTagName]属性 您可以检查是否进行序列化和反序列化 模型
嗯,您的硬盘类也需要可序列化。你试过什么?看起来不像是有效的c。我相信课堂应该是课堂。此外,通过我见过的任何库进行序列化,只能在属性上工作,不能在字段上工作。@SharkyShark,答案是否满足您的需要?如果是,请标记它。如果没有,告诉我们你的困难。
[System.Serializable]
[System.Xml.Serialization.XmlRoot(ElementName = "hard_disk")]
public class HardDisk
{
[System.Xml.Serialization.XmlElement]
public string model { get; set; }
[System.Xml.Serialization.XmlElement]
public int size { get; set; }
public HardDisk() { }
}
[System.Serializable]
[System.Xml.Serialization.XmlRoot(ElementName = "HardwareInfo")]
public class Hardware
{
[System.Xml.Serialization.XmlElement]
public string cpu_name { get; set; }
[System.Xml.Serialization.XmlElement]
public int ram_size { get; set; }
[System.Xml.Serialization.XmlElement(ElementName = "hard_disk")]
public List<HardDisk> hd { get; set; }
public Hardware()
{
hd = new List<HardDisk>();
}
}
class Program
{
static void Main(string[] args)
{
var hw = new Hardware()
{
cpu_name = "ABC Pentium xyz",
ram_size = 123,
hd = new List<HardDisk>()
{
new HardDisk() {
model = "Toshiba XYZ",
size = 123
},
new HardDisk() {
model = "Logitech XYZ",
size = 99
}
}
};
var xml = new System.Xml.Serialization.XmlSerializer(typeof(Hardware));
var ns = new System.Xml.Serialization.XmlSerializerNamespaces();
ns.Add("", "");
xml.Serialize(Console.Out, hw, ns);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<HardwareInfo>
<cpu_name>ABC Pentium xyz</cpu_name>
<ram_size>123</ram_size>
<hard_disk>
<model>Toshiba XYZ</model>
<size>123</size>
</hard_disk>
<hard_disk>
<model>Logitech XYZ</model>
<size>99</size>
</hard_disk>
</HardwareInfo>
[Serializable]
[XmlRoot(ElementName = "HardwareInfo")]
public class Hardware
{
[XmlElement]
public string cpu_name { get; set; }
[XmlElement]
public int ram_size { get; set; }
[XmlElement("hard_disk")]
public List<HardDisk> hd { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "hard_disk")]
public class HardDisk
{
[XmlElement]
public string model { get; set; }
[XmlElement]
public string size { get; set; }
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xmlString = @"<HardwareInfo>
<cpu_name> ABC Pentium xyz</cpu_name>
<ram_size> 123 </ram_size>
<hard_disk>
<model>Toshiba XYZ</model>
<size> 123 GB </size>
</hard_disk>
<hard_disk>
<model>Logitech XYZ</model>
<size> 99 GB </size>
</hard_disk>
</HardwareInfo>";
var result = DeSerialization<Hardware>(xmlString);
}
static T DeSerialization<T>(string xmlStrig) where T : class
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringReader sReader = new StringReader(xmlStrig))
{
return (T)xmlSerializer.Deserialize(sReader);
}
}
}
}