【发布时间】:2018-05-01 16:13:51
【问题描述】:
我看过一个使用包装类来执行此操作的示例,但我想知道是否有更好(更简单)的方法。
我的课如下:
public class PartData
{
public List<PartInfo> PartList { get; set; }
}
public class PartInfo
{
public string PartNumber { get; set; }
public string OEMNumbers { get; set; }
public List<VehicleApplication> VehicleApplications { get; set; }
}
public class VehicleApplication
{
public string Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
序列化代码:
//serialize
private void serialize()
{
PartData p = GetParts();
SerializeClass(p);
}
public void SerializeClass(object instance)
{
var serializer = new XmlSerializer(typeof(PartData));
using (var writer = new StreamWriter("C:\\TestFile.xml"))
{
serializer.Serialize(writer, instance);
}
}
当序列化时,我得到以下输出:
<PartData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PartList>
<PartInfo>
<PartNumber>12345</PartNumber>
<OEMNumbers>14556, 14557, 14558, 14559</OEMNumbers>
<VehicleApplications>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
</VehicleApplications>
</PartInfo>
</PartList>
</PartData>
理想情况下,我想让 PartNumber 成为这样的属性:
<PartData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PartList>
<PartInfo>
<PartNumber Id ="12345">
<OEMNumbers>14556, 14557, 14558, 14559</OEMNumbers>
<VehicleApplications>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
<VehicleApplication>
<Year>2001</Year>
<Make>Ford</Make>
<Model>F150</Model>
</VehicleApplication>
</VehicleApplications>
</Partnumber>
</PartInfo>
</PartList>
</PartData>
我已经尝试添加:
public class PartInfo
{
[XmlAttribute("Id")]
public string PartNumber { get; set; }
public string OEMNumbers { get; set; }
public List<VehicleApplication> VehicleApplications { get; set; }
}
但创建:
<PartInfo Id="12345">
当我需要时:
<PartNumber Id="12345">
【问题讨论】:
-
您可能是指
<PartInfo PartNumber='12345'>(例如,没有PartNumber作为PartInfo内容的“包装器”)。如果确实如此,只需将[XmlAttribute]添加到PartNumber属性即可。 -
你目前的序列化情况如何?看起来你可以试试
[XmlAttribute],(也请减少你的例子,我花了一段时间才弄清楚有什么不同!) -
抱歉粗略的解释......你们两个建议的结果是:
当我想要 -
我认为您可能需要做的是制作一个具有字符串的零件编号类(即另一个包装器);编辑以节省您在代码中使用部件号时编写额外的行,只需拥有您当前的部件号,获取并设置包装类字符串值
-
我真的不想做的事......
标签: c# xml xmlserializer