You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Dynamics 365的RetrieveMultipleRequest获取原始XML响应?

问题解答

核心结论

RetrieveMultipleRequest无法直接返回原始XML格式的响应,它默认返回的是强类型的EntityCollection对象(包含结构化的实体数据)。如果需要XML格式的结果,得自己对返回的EntityCollection进行序列化处理。

替代实现方案

1. 使用RetrieveMultipleRequest获取数据后序列化XML

先通过RetrieveMultipleRequest拿到实体集合,再将其序列化为XML。示例代码如下:

// 构造RetrieveMultiple请求
var retrieveRequest = new RetrieveMultipleRequest
{
    Query = new FetchExpression(xml) // xml是你的FetchXML字符串
};

// 执行请求并获取响应
var retrieveResponse = (RetrieveMultipleResponse)ServiceClient.Execute(retrieveRequest);
EntityCollection results = retrieveResponse.EntityCollection;

// 将EntityCollection序列化为XML
var serializer = new DataContractSerializer(typeof(EntityCollection));
using (var writer = new StringWriter())
using (var xmlWriter = XmlWriter.Create(writer))
{
    serializer.WriteObject(xmlWriter, results);
    string xmlResult = writer.ToString();
    // 这里的xmlResult就是序列化后的XML字符串
}

2. 若需严格匹配原ExecuteFetchResponse的XML格式

如果必须和旧版ExecuteFetchResponse返回的原始XML结构完全一致,SDK没有直接替代API,这时可以考虑调用Dynamics 365的Web API端点,直接发送FetchXML请求获取XML响应:

// 示例:使用HttpClient调用Web API获取原始XML
using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
    
    string fetchXmlEncoded = Uri.EscapeDataString(xml);
    string url = $"{orgUrl}/api/data/v9.2/accounts?fetchXml={fetchXmlEncoded}"; // 替换为你的实体集或通用端点
    
    HttpResponseMessage response = await client.GetAsync(url);
    string rawXmlResponse = await response.Content.ReadAsStringAsync();
}

补充说明

旧版ExecuteFetchRequest虽然没有标记Obsolete,但微软已不再推荐使用,官方文档明确引导使用RetrieveMultipleRequest配合FetchExpression来执行FetchXML查询,后者更符合SDK的强类型设计,也便于后续数据处理。

内容的提问来源于stack exchange,提问作者iquellis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:58:13