可以/应该使用XmlSerialiser来解析/序列化与xml'类似'的以下第三方定义的消息协议吗?将c#中的“几乎”xml字符串序列化到类#
该协议指定了一些消息,一些包含其他人不需要的属性,例如,协议A
- 甲GetEvent消息将被转移为字符串
<GetEvent></GetEvent>
- 甲AckEvent消息是与2个PARAMS作为字符串被转移
<AckEvent>1234,888</AckEvent>
我想用的XDocument做去/从类的序列化(理想情况下,这些类将从一个xsd文件生成),例如
class GetEvent{}
class AckEvent{int ID; int Type;}
,但没有属性的类得到初始化一个“最小化”关闭标签:<GetEvent />
未被协议允许的。另外,相同的第三方设备具有另一个稍有不同的界面,因为这些属性将被包含在标签中,例如,方案B:
使用参数甲SomeOtherEvent消息将被转移为字符串 <SomeOtherEvent><ID>1234</ID><TYPE>999</TYPE></SomeOtherEvent>
我可以使用serialize这些:
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;
}
但是仍然有最小化的结束标记的问题而没有PARAMS消息。
- 如何指定Protocol A属性被序列化为逗号分隔值而不是被封装在标记中?
- 如何为任一协议指定“不最小化”结束标记用于没有参数的消息?
- 正在使用适用于上述的XmlSerialisation框架还是XML不够?如果不是最简单的最简洁的方法?
请参阅[这个答案](http://stackoverflow.com/questions/6075343/xml-to-c-class/6075395#6075395)以及 – abatishchev 2011-05-23 13:06:58