XmlSerializer输出xml类型
本文关键字:类型 xml 输出 XmlSerializer | 更新日期: 2023-09-27 18:16:02
我正在使用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>
我需要知道数据是二进制的。
感谢Craig。如果您的类是由第三方提供的,那么您知道您的属性和属性类型,并且可以从中推断出您的XML和XSD。您可以手动创建XSD,也可以借助XML工具,例如XMLSpy(不是免费的)或XMLFox(免费的)。
如果你知道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);
}
}
Main Method
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;
它将其反序列化为一个以"Test"作为字节数组的对象。
如果你在运行时生成XSD,那么就没有办法知道有什么属性,这将是使用反射来测试特定的属性,然后找出他们可能是什么类型,这是你的后?