本文介绍了自定义XML序列化 - 包括类名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我下面的XML序列化后输出是:
< XML版本=1.0&GT?;
<消息>
<版> 1.0< /版>
<车身及GT;
< ExampleObject的xmlns:XSI =http://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =http://www.w3.org/2001/XMLSchema>
< EmampleOne>你好<!/ EmampleOne>
< / ExampleObject>
< /身体>
< /消息>
我有以下类:
[Serializable接口]
公共类消息< T>
{
公共字符串版本{获得;组; }
公共牛逼身体{获得;组; }
}
[可序列化]
公共类ExampleObject
{
公共字符串EmampleOne {获得;组; }
}
如果我单独序列化他们,我得到:
< XML版本=1.0&GT?;
<消息>
<版> 1.0< /版>
<车身及GT;
< EmampleOne>你好<!/ EmampleOne>
< /身体>
< /消息>
和
< XML版本=1.0&GT?;
< ExampleObject>
< EmampleOne>你好<!/ EmampleOne>
< / ExampleObject>
所以,如上图所示,我想内部主体包含类的名称< ExampleObject>
我用仿制药,因为我需要有不同的邮件正文的,我用code序列:
VAR OBJ =新的消息< ExampleObject>
{
版本=1.0,
车身=例子
};
VAR serializer2 =新的XmlSerializer(typeof运算(消息< ExampleObject>));
解决方案
由于@Marc Gravell在他的评论所说,你可以使用的:
VAR xmlOverrides =新XmlAttributeOverrides();
VAR属性=新XMLATTRIBUTES();
attributes.XmlElements
。新增(新XmlElementAttribute(ExampleObject的typeof(ExampleObject)));
xmlOverrides.Add(typeof运算(消息< ExampleObject>),身体,属性);
VAR serializer2 =新的XmlSerializer(typeof运算(消息< ExampleObject>),xmlOverrides);
I'm after the following XML serialization output:
<?xml version="1.0"?>
<Message>
<Version>1.0</Version>
<Body>
<ExampleObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EmampleOne>Hello!</EmampleOne>
</ExampleObject>
</Body>
</Message>
I have the following classes:
[Serializable]
public class Message<T>
{
public string Version { get; set; }
public T Body { get; set; }
}
[Serializable]
public class ExampleObject
{
public string EmampleOne { get; set; }
}
If I serialize them separately I get:
<?xml version="1.0"?>
<Message>
<Version>1.0</Version>
<Body>
<EmampleOne>Hello!</EmampleOne>
</Body>
</Message>
And:
<?xml version="1.0"?>
<ExampleObject>
<EmampleOne>Hello!</EmampleOne>
</ExampleObject>
So as shown above I'm wanting the inner body to contain the class name <ExampleObject>
.
I use generics as I need to have different Message Body's, I serialize with the code:
var obj = new Message<ExampleObject>
{
Version = "1.0",
Body = example
};
var serializer2 = new XmlSerializer(typeof (Message<ExampleObject>));
解决方案
As @Marc Gravell suggested in his comment, you can use XmlAttributeOverrides:
var xmlOverrides = new XmlAttributeOverrides();
var attributes = new XmlAttributes();
attributes.XmlElements
.Add(new XmlElementAttribute("ExampleObject", typeof (ExampleObject)));
xmlOverrides.Add(typeof(Message<ExampleObject>), "Body", attributes);
var serializer2 = new XmlSerializer(typeof(Message<ExampleObject>), xmlOverrides);
这篇关于自定义XML序列化 - 包括类名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!