从wcf服务返回wcf / json结果

时间:2010-08-25 07:25:57

标签: wcf

我需要服务合同来根据请求类型返回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。

1 个答案:

答案 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属性的所有属性。从您的操作中返回该自定义类实例的集合。