#c# #xml #serialization #xml-deserialization
#c# #xml #сериализация #xml-десериализация
Вопрос:
У меня есть структура классов следующим образом
public class Common
{
public int price { get; set; }
public string color { get; set; }
}
public class SampleProduct:Common
{
public string sample1 { get; set; }
public string sample2 { get; set; }
public string sample3 { get; set; }
}
У меня есть XML-файл следующим образом
<ConfigData>
<Common>
<price>1234</price>
<color>pink</color>
</Common>
<SampleProduct>
<sample1>new</sample1>
<sample2>new</sample2>
<sample3>new123</sample3>
</SampleProduct>
</ConfigData>
Теперь я хотел десериализовать полные данные XML в объект SampleProduct (одиночный объект).Я могу десериализовать XML-данные в другой объект, но не в один объект. Пожалуйста, помогите.
Комментарии:
1. Вы создаете XML-файл самостоятельно или он предоставляется в другом месте?
2. вам просто нужно создать новое имя класса «ConfigData» и поместить Common и SampleProduct в этот класс. Используйте ConfigData, чем для десериализации
3. Я предложил внести правку, чтобы изменить структуру классов, так что вы ищете это?
Ответ №1:
Если вы создаете XML самостоятельно, просто сделайте это следующим образом:
<ConfigData>
<SampleProduct>
<price>1234</price>
<color>pink</color>
<sample1>new</sample1>
<sample2>new</sample2>
<sample3>new123</sample3>
</SampleProduct>
</ConfigData>
В противном случае, если вы получаете XML из других источников, сделайте то, что предложил Каяни в своем комментарии:
public class ConfigData
{
public Common { get; set; }
public SampleProduct { get; set; }
}
Но не забывайте, что созданный таким образом SampleProduct не имеет свойств «цена» и «цвет», и они должны быть установлены с использованием созданного общего экземпляра
Ответ №2:
Вот полное решение, использующее предоставленный вами XML.
public static void Main(string[] args)
{
DeserializeXml(@"C:sample.xml");
}
public static void DeserializeXml(string xmlPath)
{
try
{
var xmlSerializer = new XmlSerializer(typeof(ConfigData));
using (var xmlFile = new FileStream(xmlPath, FileMode.Open))
{
var configDataOSinglebject = (ConfigData)xmlSerializer.Deserialize(xmlFile);
xmlFile.Close();
}
}
catch (Exception e)
{
throw new ArgumentException("Something went wrong while interpreting the xml file: " e.Message);
}
}
[XmlRoot("ConfigData")]
public class ConfigData
{
[XmlElement("Common")]
public Common Common { get; set; }
[XmlElement("SampleProduct")]
public SampleProduct XSampleProduct { get; set; }
}
public class Common
{
[XmlElement("price")]
public string Price { get; set; }
[XmlElement("color")]
public string Color { get; set; }
}
public class SampleProduct
{
[XmlElement("sample1")]
public string Sample1 { get; set; }
[XmlElement("sample2")]
public string Sample2 { get; set; }
[XmlElement("sample3")]
public string Sample3 { get; set; }
}
Это даст вам единый объект со всеми необходимыми элементами.
Комментарии:
1. переменная configDataOSinglebject предоставляет вам объект. Я забыл добавить туда комментарий.