gpt4 book ai didi

c# - 在 C# 中将类序列化为 'almost' xml 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:43 24 4
gpt4 key购买 nike

XmlSerialiser 可以/应该用于反/序列化以下第 3 方定义的与 xml ‘相似’的消息协议(protocol)吗?

该协议(protocol)指定了一些消息,一些包含其他不包含的属性,例如协议(protocol)A

  • GetEvent 消息将作为字符串 <GetEvent></GetEvent> 传输
  • AckEvent 消息将与 2 个参数作为字符串 <AckEvent>1234,888</AckEvent> 一起传输

我想使用 XDocument 对类进行反序列化/序列化(理想情况下,类将从 xsd 文件生成)例如

class GetEvent{}
class AckEvent{int ID; int Type;}

但没有属性的类会使用“最小化”结束标记进行序列化:<GetEvent />这是协议(protocol)不允许的。

此外,同一个第 3 方设备有另一个接口(interface),该接口(interface)略有不同,因为属性要包含在标签中,例如协议(protocol) 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;
}

但是对于没有参数的消息,仍然存在最小化结束标签的问题。

  • 如何指定将协议(protocol) A 属性序列化为逗号分隔值而不是包含在标记中?
  • 如何指定“非最小化”结束标记用于没有任何协议(protocol)参数的消息?
  • 使用适合上述情况的 XmlSerialisation 框架还是 XML 不够?如果不是,最简单最干净的方法是什么?

最佳答案

尝试使用XmlElement attribute .

关于c# - 在 C# 中将类序列化为 'almost' xml 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com