0

我想了解如何使用 JSON 响应继续创建基于 REST 的 WCF 服务和实体数据模型。我已按照以下说明进行操作:

http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

这是DeviceManagementService_RestIService1.cs 文件中的命名空间:

这里。deviceOS 是用于列出运行特定操作系统的不同设备的参数。

[ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
                   ResponseFormat = WebMessageFormat.Json, UriTemplate = "json/{deviceOS}", BodyStyle = WebMessageBodyStyle.Bare)]

        string JSONData(string deviceOS);
    }

创建此类用于查询数据并转换为 JSON 格式:

public class Service1 : IService1
    {
        DeviceManEntities dme;
        public string JSONData(string deviceOS)
        {
            dme = new DeviceManEntities();
            var result = (from m in dme.DeviceInfoes
                          select new
                          {
                              Name = m.deviceName,
                              OS = m.deviceOS,
                              UID = m.deviceUID
                          }).ToList();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            return serializer.Serialize(result);

        }
    }

问题是:我得到这种格式的响应:

"[{\"Name\":\"Galaxy S3\",\"OS\":\"Andriod\",\"UID\":\"101\"},
{\"Name\":\"iPhone 5-D1\",\"OS\":\"iOS\",\"UID\":\"123\"}]"

理想情况下,我希望它是这样的:

"[{"Name":"Galaxy S3","OS":"Android","UID":"101"}
{"Name":"iPhone 5-D1","OS":"iOS","UID":"123"}]"
  1. 我怎样才能删除那些“\”
  2. 序列化的实现是否正确?如果没有,有更好的方法吗?
4

1 回答 1

2

您不需要自己将响应序列化为 Json。将其留给 WCF,就像您通过设置[WebInboke]使用 Json 响应格式设置属性一样ResponseFormat = WebMessageFormat.Json

只需定义服务契约,使其返回一个 .net 对象,WCF 就会为您处理序列化。按照您的示例,为设备创建一个类,并在服务操作中返回一个设备列表(或者如果您愿意,可以返回一个数组):

public class Device
{
    public string Name { get; set; }
    public string OS { get; set; }
    public int UID { get; set; }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "GET",
               ResponseFormat = WebMessageFormat.Json, 
               UriTemplate = "json/{deviceOS}", 
               BodyStyle = WebMessageBodyStyle.Bare)]
    List<Device> JSONData(string deviceOS);
}

public class Service1 : IService1
{
    DeviceManEntities dme;
    public List<Device> JSONData(string deviceOS)
    {
        dme = new DeviceManEntities();
        return (from m in dme.DeviceInfoes
                      select new Device
                      {
                          Name = m.deviceName,
                          OS = m.deviceOS,
                          UID = m.deviceUID
                      }).ToList();

    }
}

你有一些其他类似的教程在这里这里展示了这一点

于 2013-05-28T22:32:38.793 回答