我正在使用XmlSerializer,并且想知道是否有任何方法,使用覆盖或某种方式来使XmlSerializer输出某些节点的类型。
我的问题是我已经序列化了一个字节数组。
class MyClass {
public string Name { get; set; }
public byte[] Bytes { get; set; }
}
我在通用服务中使用xml。 该服务将xml收集为。
<MyClass>
<Name>Test</Name>
<Bytes>U2NhcnkgQnVnZ2Vy</Bytes>
</MyClass>
有没有办法在运行时生成xsd,或以某种方式输出这样的东西。
我无法更改我正在序列化的类,但我可以对序列化器应用覆盖或以其他方式控制序列化。
<Bytes xsi:type='BinaryOfSomeKind'>BlahBlah</Bytes>
我需要知道数据是二进制的。
由于
克雷格。
答案 0 :(得分:0)
如果您知道xml将采用您提出问题的格式,并且您已经准备好了您的课程,那么您可以对其进行装饰,以便对其进行反序列化。
反序列化类:
[XmlTypeAttribute]
[XmlRootAttribute("MyClass")]
public class MyClass
{
[XmlElementAttribute("Name")]
public string Name { get; set; }
[XmlElementAttribute("Bytes")]
public byte[] Bytes { get; set; }
}
反序列化方法
public static object Deserialize(string xml)
{
var deserializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
using (var reader = XmlReader.Create(new StringReader(xml)))
{
return (MyClass)deserializer.Deserialize(reader);
}
}
主要方法
static void Main(string[] args)
{
string xml = @"<MyClass>
<Name>Test</Name>
<Bytes>U2NhcnkgQnVnZ2Vy</Bytes>
</MyClass>";
MyClass obj = (MyClass)Deserialize(xml);
Console.ReadKey();
}
确保添加以下using语句:
using System.Xml.Serialization;
using System.Xml;
它将它反序列化为一个obj,其中“Test”作为字节数组。
如果你在运行时生成XSD,那么你无法知道它们有哪些属性,而是使用反射来测试特定的属性,然后找出它们可能是什么类型,这是你的追求是什么?
答案 1 :(得分:0)