我需要服务合同来根据请求类型返回xml / json结果。我还需要一种帮助函数来转换我的结果集(我使用linq到sql)这样我就不需要了通过多次遍历表行来为结果集创建xml格式。这是什么方法。
我需要一种将表数据转换为xml结果的快捷方法。如果我一直在使用asp.net mvc,我可以通过覆盖ActionResult中的ExecuteResult方法生成xml数据并给出Conetnt-Type =“text / xml”as OP.But,因为我正在使用 Wcf我没有控制器上下文(因为控制器上下文是需要传递给执行结果的参数)。
我目前将表数据转换为xml格式的代码如下所示。
public XDocument UsersLists(string authToken)
{
bool IsAuthenticated = Authenticate(authToken);
XDocument xDoc = new XDocument();
XElement root = new XElement("Users");
if (IsAuthenticated)
{
List<User> lstUsers = _lService.UserRepository.GetUserCompanyFromAccountID(GetAccountId(authToken)).ToList();
if (lstUsers != null)
{
root.Add(new XElement("Message", "Success"));
foreach (var u in lstUsers)
{
XElement chid = new XElement("User");
root.Add(new XElement("UserId", u.UserId));
root.Add(new XElement("FirstName", u.FirstName));
root.Add(new XElement("LastName", u.LastName));
root.Add(new XElement("Email", u.Email));
root.Add(new XElement("CompanyName", u.Company.CompanyName));
root.Add(chid);
}
xDoc.Add(root);
return xDoc;
}
else
{
return ReturnFailure(xDoc, root);
}
}
else
{
return ReturnFailure(xDoc, root);
}
}
我需要为每个表记录消除这种生成xml的方式。
早期的回应是无价的。 感谢
技术:Windows Communication Foundation。
答案 0 :(得分:0)
返回XML或JSON的单个操作的实现因WCF 3.5或WCF 4.0而异。要在WCF 3.5中实现此功能,请检查此thread。通常,您必须创建自定义行为并根据请求中的Accept标头设置内容类型。 WCF 4.0本机支持此功能。 WebHttpBehavior具有属性AutomaticFormatSelectionEnabled。如果将此属性设置为true,则应该只开箱即用。
提出第二个问题。您不需要像ASP.NET MVC中那样的任何自定义格式。 WCF中的格式化由序列化处理。只需从您的操作返回收集,您将看到会发生什么。默认情况下,Linq-To-Sql生成的实体应该是可序列化的。只是不要忘记在从方法返回之前执行查询。如果您需要与Linq-To-Sql实体不同的特殊日期格式,则创建具有公共无参数构造函数的自定义数据类型以及具有getter和setter的所有必需属性。如果你想明确makr那个带有DataContract属性的类和带有DataMember属性的所有属性。从您的操作中返回该自定义类实例的集合。