Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回列表<;T>;作为来自WCF服务的XML响应?_C#_Wcf - Fatal编程技术网

C# 返回列表<;T>;作为来自WCF服务的XML响应?

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

我有一个返回颜色列表的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 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消息。