Witam. Czego użyć do przekonwertowania takiego tekstu na obiekt DataTable / DataSet lub do kolekcji obiektów Group[]
<tables>
<table name="Groups">
<fields>
<field name="GroupID" type="Integer"/>
<field name="Name" type="String"/>
<field name="Custom1" type="String"/>
<field name="Custom2" type="String"/>
<field name="OutputBits" type="String"/>
<field name="OutputBits1" type="String"/>
<field name="OutputBits2" type="String"/>
<field name="OutputBits3" type="String"/>
<field name="DefaultHotelGroup" type="Boolean"/>
</fields>
<rows>
<row>
<f>1</f>
<f>Użytkownicy</f>
<f>null</f>
<f>null</f>
<f>0</f>
<f>0</f>
<f>0</f>
<f>0</f>
<f>False</f>
</row>
</rows>
</table>
</tables>
Klasa Group:
/// <summary>
/// Reprezentuje grupę dostępu
/// </summary>
public class Group
{
/// <summary>
/// Identyfikator grupy
/// </summary>
public int GroupID { get; set; }
/// <summary>
/// Nazwa grupy
/// </summary>
public string Name { get; set; }
/// <summary>
/// Komentarz 1
/// </summary>
public string Custom1 { get; set; }
/// <summary>
/// Komentarz 2
/// </summary>
public string Custom2 { get; set; }
public string OutputBits { get; set; }
public string OutputBits1 { get; set; }
public string OutputBits2 { get; set; }
public string OutputBits3 { get; set; }
/// <summary>
/// Domyślna grupa gościa
/// </summary>
public bool DefaultHotelGroup { get; set; }
}
Próbowałem:
internal static class XmlParser
{
public enum eEncodingType
{
UTF8,
ASCII,
UTF7,
BigEndianUnicode,
Unicode,
UTF32,
Default
}
private static MemoryStream ConvertXmlStringToStream(string xml, eEncodingType encodingType)
{
byte[] byteArray = new byte[] { };
switch (encodingType)
{
case eEncodingType.UTF8:
byteArray = Encoding.UTF8.GetBytes(xml);
break;
case eEncodingType.ASCII:
byteArray = Encoding.ASCII.GetBytes(xml);
break;
case eEncodingType.UTF7:
byteArray = Encoding.UTF7.GetBytes(xml);
break;
case eEncodingType.BigEndianUnicode:
byteArray = Encoding.BigEndianUnicode.GetBytes(xml);
break;
case eEncodingType.Unicode:
byteArray = Encoding.Unicode.GetBytes(xml);
break;
case eEncodingType.UTF32:
byteArray = Encoding.UTF32.GetBytes(xml);
break;
default:
byteArray = Encoding.Default.GetBytes(xml);
break;
}
MemoryStream stream = new MemoryStream(byteArray);
DataSet ds = new DataSet();
return stream;
}
private static DataSet ConvertStreamToDataSet(MemoryStream stream)
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(stream);
return dataSet;
}
public static Definitions.Group DeserializeGroup(string xml, eEncodingType encodingType = eEncodingType.UTF8)
{
MemoryStream stream = ConvertXmlStringToStream(xml, encodingType);
DataSet dataSet = ConvertStreamToDataSet(stream);
return new Definitions.Group();
}
}
Niestety dataSet
zamiast jednej tabeli Groups
posiada tabele:
- table
- fields
- field
- rows
- row
- f
co oznacza, że coś jest nie tak.
Wykombinowałem również coś takiego jednak im dalej w to brnę tym bardziej nie wiem co i jak:
public static Definitions.Group DeserializeGroup(string xml)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
return new Definitions.Group();
}
Grzegorz Świdwa