C# 根返回元素的WCF Rest更改名称

C# 根返回元素的WCF Rest更改名称,c#,.net,xml,wcf,rest,C#,.net,Xml,Wcf,Rest,我有 但这种情况仍然存在 [OperationContract] [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "projects/{projectname}")] [return: MessageP

我有

但这种情况仍然存在

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Xml,
    RequestFormat = WebMessageFormat.Xml,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "projects/{projectname}")]
[return: MessageParameter(Name = "ProjectId")]
Guid CreateProject(String projectName);
如果我将OperationContract BodyStyle更改为
WrappedResponse
我会得到:

public Guid CreateProject(String projectName)
{
     return Guid.Empty;
}

00000000-0000-0000-0000-000000000

这几乎就是我想要的,但我不想不必要地包装。

你成为你定义的人。您已定义接收XML格式的空GUID,它将返回XML格式的空GUID。一切都好

也许您需要将GUID转换为某种字符串id,然后
GUID.NewGuid().ToString(“N”)

当您不需要xml时,您需要调整属性并使用来自客户端的HTTP Accept头,例如Json Accept:
application/Json
,或string-
plain/text

UPD: 现在有点清楚了。您的问题实际上是如何更改XML结构。对于标准类型,我建议您使用标准XML结构,因为您已经从box XML格式化程序实现了。无论如何,当您需要更改格式化程序时,您可以通过扩展
WebHttpBehavior
并重写
WebHttpBehavior.GetReplyDispatchFormatter
方法来返回System.ServiceModel.Dispatcher.IDispatchFormatter的自定义实现(如示例所示)

我还想提到的是,您使用的是WCF4REST,这项技术是传统的。当您处理的不是遗留项目或维护时,我建议您使用,因为这和许多其他事情可以在那里更容易地完成。

最简单的解决方案是

<CreateProjectResponse 
    xmlns="http://tempuri.org/">
    <ProjectId>00000000-0000-0000-0000-000000000</ProjectId>
</CreateProjectResponse>

这并不是我想要的,但它很有效。

那么CreateProject会返回什么呢?有效guid?显示更多代码=>您只发布了接口和结果。。。但不是服务实现。它返回一个guid,格式与我的帖子中的格式相同。我认为我没有将其定义为接受空guid。我的问题是如何将返回的XML格式化为000-000-00而不是?我已经在UPD部分的答案中给出了答案
<CreateProjectResponse 
    xmlns="http://tempuri.org/">
    <ProjectId>00000000-0000-0000-0000-000000000</ProjectId>
</CreateProjectResponse>
return new XElement("ProjectId", Guid.Empty);