我没有获得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));
}
}
任何人都可以帮我用root元素获取结果,让我知道我做了什么样的错误。
谢谢&问候, 维杰
答案 0 :(得分: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中,您不必担心这一点。
答案 1 :(得分:0)
虽然上述解决方案完美无缺,但您也可以尝试在方法上使用参数BodyStyle = WebMessageBodyStyle.WrappedResponse of WebInvoke属性。
这包含了类型名称中的值。