Можно / нужно использовать XmlSerialiser для де / сериализации следующего, определенного третьей стороной, протокола сообщений, который «похож» на xml?
Протокол определяет количество сообщений, некоторые из которых содержат атрибуты, а другие нет, например. Протокол А
- Сообщение GetEvent должно быть передано в виде строки
<GetEvent></GetEvent>
- Сообщение AckEvent должно быть передано с двумя параметрами в виде строки
<AckEvent>1234,888</AckEvent>
Я хотел бы использовать XDocument для выполнения де / сериализации в / из классов (в идеале классы должны быть сгенерированы из файла xsd), например
class GetEvent{}
class AckEvent{int ID; int Type;}
Но классы без атрибутов сериализуются с закрывающим тегом 'minimized': <GetEvent />
, который не разрешен протоколом.
Кроме того, у того же стороннего устройства есть другой интерфейс, который немного отличается тем, что атрибуты должны быть заключены в теги, например. Протокол Б:
Сообщение SomeOtherEvent с параметрами будет передано в виде строки
<SomeOtherEvent><ID>1234</ID><TYPE>999</TYPE></SomeOtherEvent>
Я могу сериализовать их, используя:
public static XDocument Serialize<T>(T source)
{
XDocument target = new XDocument();
XmlSerializer s = new XmlSerializer(typeof(T));
System.Xml.XmlWriter writer = target.CreateWriter();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
s.Serialize(writer, source, ns);
writer.Close();
return target;
}
Но все еще есть проблема минимизированного закрывающего тега для сообщений без параметров.
- Как указать, что атрибуты протокола A должны быть сериализованы как значения, разделенные запятыми, а не заключены в теги?
- Как я могу указать, что закрывающий тег «не минимизирован» используется для сообщений без параметров для любого из протоколов?
- Подходит ли использование платформы XmlSerialisation для вышеперечисленного или недостаточно XML? Если нет, то какой будет самый простой и чистый подход?