0

我没有得到任何 Json 格式的根值。我收到如下回复:

[{"Username":"demo","UserID":8,"Password":"demo","EmaiID":"demo@gmail.com"}]

我想要格式如下

{UserList: [[{"Username":"demo","UserID":8,"Password":"demo","EmaiID":"demo@gmail.com"}]}

服务声明:

public interface IDemo
{  
    [OperationContract]
    [WebInvoke(RequestFormat = WebMessageFormat.Json,ResponseFormat =
    WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/Validate", Method = "POST")]
    Stream ValidateUser(Login obj);

}

[DataContract]
public class Login
{

    public Login()
    {
    }

    [DataMember]
    public string Username { get; set; }
    [DataMember]
    public string Password { get; set; }
}

服务定义:

public class Demo: IDemo
{
    string Json = string.Empty;

    JavaScriptSerializer obj1 = new JavaScriptSerializer();

    public Stream ValidateUser(Login obj)
    {

        UserList objUserList = new UserList();
        Users objUser = new Users();
        objUser.Username = obj.Username;
        objUser.Password = obj.Password;

        objUserList = LoginDataService.ValidateUser(objUser.Username,objUser.Password) ;

        if (objUserList.Count > 0)
        {
            Json = obj1.Serialize(objUserList);
            WebOperationContext.Current.OutgoingResponse.ContentType =  
            "application/json; charset=utf-8"; 
        }
        else
        {
            UserError objError = new UserError();

            objError.ErrMsg = "LoginFailed";objError.Username = objUser.Username ;

            Json = obj1.Serialize(objError);

            WebOperationContext.Current.OutgoingResponse.ContentType = 
            "application/json; charset=utf-8";
        }

        return new MemoryStream(Encoding.UTF8.GetBytes(Json));  
    }
}

谁能帮我用根元素得到结果,让我知道我犯了什么样的错误。

谢谢和问候,维杰

4

2 回答 2

0

由于您将集合序列化为 JSON,因此您将获得类似的格式。您可以返回一个将列表包装为属性的类,然后您将获得所需的内容。

例如。你可以像这样创建一个类

public class UserListResponse
{
   public UserList UserList{get; set;}
} 

现在你得到了你所期望的 JSON,比如

{UserList:[..]}

我不明白你为什么要返回一个 Stream 并自己做所有的序列化框架,基本上这一切都是由框架完成的。您所要做的就是UserListResponse从服务方法返回包装类。

public class Demo: IDemo
{
   public UserListResponse ValidateUser(Login obj)
   {
      ...
      return new UserListResponse{ UserList = objUserList};
   }
}

WCF 将负责将结构返回到 JSON 或 XML 中,您无需担心这一点。

于 2012-06-20T09:28:50.857 回答
0

虽然上述解决方案非常有效,但您也可以尝试在您的方法上使用参数 BodyStyle=WebMessageBodyStyle.WrappedResponse 的 WebInvoke 属性。

这将值包装在类型名称中。

于 2013-01-07T11:44:55.800 回答