2010-08-25 131 views
0

我需要通过服务契约根据请求类型返回xml/json结果。我还需要一种辅助函数,它将转换我的结果集(我正在使用linq sql),所以我不需要通过迭代遍历表行来多次创建结果集的xml格式。什么是合适的方式来做到这一点。从wcf服务返回wcf/json结果

我需要一种捷径方法,它将表格数据转换为xml result.Had我一直在使用asp.net mvc,我将能够通过覆盖ActionResult中的ExecuteResult方法来生成xml数据,并且Conetnt-Type =“text/xml”作为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通信基金会。

回答

0

返回XML或JSON的单一操作的实现在WCF 3.5或WCF 4.0中不同。要在WCF 3.5中实现此功能,请检查此thread。通常,您必须创建自定义行为并根据请求中的Accept标头设置内容类型。 WCF 4.0对此功能具有本机支持。 WebHttpBehavior有财产。如果将此属性设置为true,则应该开箱即用。

回答第二个问题。您不需要像ASP.NET MVC中那样的任何自定义格式。通过序列化处理WCF中的格式。只需从您的操作中返回收集,您将看到会发生什么。 Linq-To-Sql生成的实体在默认情况下应该是可序列化的。只是不要忘记在从方法返回之前执行查询。如果您需要与日期不同的特殊格式,它与Linq-to-Sql实体创建的自定义数据类型具有公共无参数构造函数以及所有getter和setter所需的属性。如果要使用DataContract属性清除该类,并使用DataMember属性清除所有属性。从您的操作中返回该自定义类实例的集合。