C# 返回列表<;T>;作为来自WCF服务的XML响应?
我有一个返回颜色列表的WCF操作:C# 返回列表<;T>;作为来自WCF服务的XML响应?,c#,wcf,C#,Wcf,我有一个返回颜色列表的WCF操作: public List<Color> GetColors() { List<Color> colors = new List<Color>(); colors.Add(new Color {Name = "Red", Code = 1}); colors.Add(new Color {Name = "Blue", Code = 2}); return colors; } public
public List<Color> GetColors()
{
List<Color> colors = new List<Color>();
colors.Add(new Color {Name = "Red", Code = 1});
colors.Add(new Color {Name = "Blue", Code = 2});
return colors;
}
public List GetColors()
{
列表颜色=新列表();
添加(新颜色{Name=“Red”,代码=1});
添加(新颜色{Name=“Blue”,代码=2});
返回颜色;
}
当我在WCF测试客户机中运行它时,它工作得很好,我可以看到颜色数组,但我实际上希望它返回XML响应,然后我可以将
RichTextBox
的文本设置为XML的内容。我该怎么做?您不能在WCF合同中使用开放泛型。SOAP不支持泛型 如果希望WCF服务返回XML,请让它返回XML。如果希望它返回列表
,那么它应该返回列表
如果希望列表的XML表示返回到客户端,我的建议是序列化列表并将其作为字符串返回到客户端
下面是一些可以帮助您开始的代码。我还没有测试过,但我认为你很容易改变
public string GetColorsXmlRepresentation()
{
var colors = new List<Color>();
colors.Add(new Color {Name = "Red", Code = 1});
colors.Add(new Color {Name = "Blue", Code = 2});
return Serialize<List<Color>>(colors);
}
public string Serialize<T>(T instance)
{
var data = new StringBuilder();
var serializer = new DataContractSerializer(instance.GetType());
using (var writer = XmlWriter.Create(data))
{
serializer.WriteObject(writer, instance);
writer.Flush();
return data.ToString();
}
}
公共字符串GetColorsXmlRepresentation()
{
var colors=新列表();
添加(新颜色{Name=“Red”,代码=1});
添加(新颜色{Name=“Blue”,代码=2});
返回序列化(颜色);
}
公共字符串序列化(T实例)
{
var data=新的StringBuilder();
var serializer=新的DataContractSerializer(instance.GetType());
使用(var writer=XmlWriter.Create(数据))
{
serializer.WriteObject(writer,instance);
writer.Flush();
返回data.ToString();
}
}
希望对您有所帮助WCF!=肥皂。WCF也可以是REST、JSON或二进制,可能还有其他一些。我不明白你的意思。当我运行Microsoft附带的WCFTest客户端时,我会看到一个格式化选项卡和XML选项卡。我基本上希望查看我的结果,就像它们出现在xml选项卡中一样,但是在我自己的wpf应用程序中。看起来他在谈论SOAP!John,如果我想返回SOAP信封,我必须手动构建它吗?我正在考虑使用XElement构建xml并返回它。我走对了吗?@Xai:没有。WCF为你序列化了你的
列表。@Sergio:这是一种什么样的观点?这是事实,这很有效。我读到的关于IDispatchMessageInspector的所有内容是什么?如果您想在消息到达时或发送之前对消息执行修改,可以使用WCF的扩展机制,称为消息检查器。您可以在这里查看更多信息:如果我不想只返回普通xml,但我想将其作为soap信封返回,该怎么办?-1:如果要序列化为xml,为什么不返回xml?我误解了这个问题。我认为他只想要列表的XML表示。不是整个SOAP消息。