繁体   English   中英

在C#中将类序列化为“几乎” xml字符串

[英]Serialize classes to 'almost' xml strings in c#

可以/应该使用XmlSerialiser来反序列化以下由第三方定义的,与xml类似的消息协议吗?

该协议指定了许多消息,有些包含一些其他属性,例如协议A

  • GetEvent消息将作为字符串<GetEvent></GetEvent>传输
  • AckEvent消息将以2个参数作为字符串<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>进行传输

我可以使用以下方法序列化这些:

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不够? 如果不是,最简单的最简单的方法是什么?

尝试使用XmlElement属性

.Net XML类只能与格式正确的XML一起使用。 如果这种“类似XML的”方案格式不正确,则必须自己动手。

这篇Wikipedia文章具有一些有关格式正确的基本规则。 有关完整定义,请参见规范

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM