gpt4 book ai didi

c# - 在 C# 中自定义反序列化示例?

转载 作者:行者123 更新时间:2023-11-30 22:50:27 25 4
gpt4 key购买 nike

我正在寻找一个示例,它可以让我将以 UTF-8 编码的 XML 流反序列化为一个类的字段。更具体地说,我有一个类,

class Foo
{
string abc;
byte[] bcd;
}

abc 映射到 XML 元素“Abc”,bcd 映射到 XML 元素“Bcd”,我想获取 bcd 的流并检索字节(直接从相关元素“Bcd”的 XML 流)手动操作/以定制的方式。

我正在寻找示例,但没有找到,谁能帮我指出相关示例或编写一些伪代码?

编辑:XML 是来自服务器的 SOAP 响应,在响应中有一个响应 XML 元素(我的示例中的元素 Bcd),它由服务器端的 UTF-8 编码,但由于 Http Web 服务将在客户端使用 base64端,所以每次我在客户端收到这样的“字节”时,自动生成的 Web 服务代理都会抛出异常,表示 base64 编码中的 XML 元素无效。所以,我正在考虑如何使用 base64 编码来解码字节来覆盖默认值,这就是我问这个问题的原因。如果有一种方法可以接受流或类似的表示相关响应元素(我的示例中的 Bcd)的在线字节并让我操作,那就太好了!

提前致谢,乔治

最佳答案

IXmlSerializable 是一个选项(但不是很有趣),但它感觉在这种情况下属性提供了大部分所需的内容而无需额外的工作:

[Serializable]
public class Foo
{
public string Abc {get;set;}
private byte[] bcd;
public byte[] Bcd {
get {return bcd;}
set {/* your code (with `value`) here */ }
}
}

重新传输格式(base64 等);您是否尝试过通过 xsd.exe 运行它?它可能会让您大吃一惊,并且做对了……但是,是的;在 IXmlSerializable 中,您可以选择 ReadContentAsBase64ReadContentAsBinHex 等。但它非常难看;类似于(对于简单版本):

[Serializable]
public class Foo : IXmlSerializable
{
public Foo() { }
public Foo(string abc, byte[] bcd)
{
Abc = abc;
Bcd = bcd;
}
public string Abc { get; private set; }
public byte[] Bcd { get; private set; }

XmlSchema IXmlSerializable.GetSchema()
{
return null;
}

void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
{
if (Abc != null)
{
writer.WriteElementString("Abc", Abc);
}
if (Bcd != null)
{
writer.WriteStartElement("Bcd");
writer.WriteBase64(Bcd, 0, Bcd.Length);
writer.WriteEndElement();
}
}
void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
{
reader.ReadStartElement();
reader.ReadStartElement("Abc");
Abc = reader.ReadString();
reader.ReadEndElement();
reader.ReadStartElement("Bcd");
MemoryStream ms = null;
byte[] buffer = new byte[256];
int bytesRead;
while ((bytesRead = reader.ReadContentAsBase64(
buffer, 0, buffer.Length)) > 0)
{
if (ms == null) ms = new MemoryStream(bytesRead);
ms.Write(buffer, 0, bytesRead);
}
if (ms != null) Bcd = ms.ToArray();
reader.ReadEndElement();
}
}

关于c# - 在 C# 中自定义反序列化示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576304/

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