使用 IXmlSerialized 自定义 xml 输出
我想要实现的目标似乎相当简单。
给定该类,
public class Wrapper<T> {
T Data { get; set; }
bool Success { get;set; }
List<Error> Errors { get; set; }
}
我只想将 Data 参数的 XML 输出包装在 标记中。
IE: 期望的输出:
<Wrapper>
<Data>
<Person first="Bob" last="Robertson"/>
</Data>
<Errors/>
<Success>true</Success>
</Wrapper
实际输出:
<Wrapper>
<Person first="Bob" last="Robertson"/>
<Errors/>
<Success>true</Success>
</Wrapper>
是否有一种 IXmlSerialized 的简单实现,我可以在大部分情况下单独保留序列化,只包装一个成员?
编辑:这是在 WCF 服务中,因此我(据我所知)无权访问 XmlSerializer 的创建。
我最终做了什么:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("Success", Success.ToString());
writer.WriteStartElement("Errors");
foreach (var error in Errors)
{
Util.XmlSerialize(error, writer);
}
writer.WriteStartElement("Data");
Util.XmlSerialize(this.Data, writer);
writer.WriteEndElement();
}
-
public class Util
{
public static void XmlSerialize<T>(T obj, XmlWriter writer)
{
var nsSerializer = new XmlSerializerNamespaces();
nsSerializer.Add("", "");
var ser = new XmlSerializer(typeof (T));
ser.Serialize(writer, obj, nsSerializer);
}
}
What I am trying to achieve seems fairly simple.
Given the class
public class Wrapper<T> {
T Data { get; set; }
bool Success { get;set; }
List<Error> Errors { get; set; }
}
I simply want to have the XML output for the Data parameter wrapped in a <Data></Data>
tag.
IE:
Desired output:
<Wrapper>
<Data>
<Person first="Bob" last="Robertson"/>
</Data>
<Errors/>
<Success>true</Success>
</Wrapper
Actual output:
<Wrapper>
<Person first="Bob" last="Robertson"/>
<Errors/>
<Success>true</Success>
</Wrapper>
Is there a simple implementation of IXmlSerializable where I can leave the serialization alone for the most part and just wrap the one member?
Edit: This is in a WCF service so I don't (as far as I know) have access to the creation of the XmlSerializer.
What I ended up doing:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("Success", Success.ToString());
writer.WriteStartElement("Errors");
foreach (var error in Errors)
{
Util.XmlSerialize(error, writer);
}
writer.WriteStartElement("Data");
Util.XmlSerialize(this.Data, writer);
writer.WriteEndElement();
}
-
public class Util
{
public static void XmlSerialize<T>(T obj, XmlWriter writer)
{
var nsSerializer = new XmlSerializerNamespaces();
nsSerializer.Add("", "");
var ser = new XmlSerializer(typeof (T));
ser.Serialize(writer, obj, nsSerializer);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 XmlOverrides:
You can use XmlOverrides:
架构
XML 序列化
XML 输出
Schema
XML Serialization
XML Output