Я видел пример, который использует класс оболочки для этого, но мне было интересно, есть ли лучший (более простой) способ.Добавить атрибут XML для сериализованного свойства класса
Мои классы следующим образом: Код
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:
//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>
В идеале я хотел бы сделать партномер в атрибут:
<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">
Вы, вероятно, означает ' '(как, нет 'PartNumber' как« обертка »содержимого' PartInfo'). Если это действительно так, просто добавьте свойство '[XmlAttribute]' в 'PartNumber'. –
pfyod
как вы сейчас сериализуетесь? похоже, что вы можете попробовать '[XmlAttribute]', (также, пожалуйста, сократите свой пример, потребовалось некоторое время, чтобы выяснить, что было по-другому!) – Sayse
извините за грубое объяснение ... что вы оба предложили:, когда мне захочется –
devHead