【发布时间】:2012-02-08 00:37:03
【问题描述】:
我想要实现的目标似乎相当简单。
给定班级
public class Wrapper<T> {
T Data { get; set; }
bool Success { get;set; }
List<Error> Errors { get; set; }
}
我只想将 Data 参数的 XML 输出包装在 <Data></Data> 标记中。
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>
是否有一个简单的 IXmlSerializable 实现,我可以在其中大部分时间不用序列化,只包装一个成员?
编辑:这是在 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);
}
}
【问题讨论】:
-
@onof:我尝试了很多东西,但感觉我正在重新实现 XmlSerializer(例如,尊重注释等)。认为可能有一种我忽略的简单方法。我还尝试重组我的代码以更好地匹配我想要的格式,但这看起来真的很臭。
标签: c# wcf xml-serialization