提问人:Mike 提问时间:3/31/2023 最后编辑:Mike 更新时间:3/31/2023 访问量:38
Json是用类名包装的,如何获取原始的JSON内部数据
Json is wrapped with the class name, how to get the raw JSON inner data
问:
我现在正在构建一个网络服务,我想用一个 android 应用程序来使用它。 我面临的问题是,应该返回字符串 (json) 的 webservice 方法将其与方法名称 (Login) 连接起来。我试图搜索这个问题,虽然我认为我不是第一个遇到这个问题的人,但我什么也没找到。
我的 json 变量如下所示:
json = "{ \"UserID\": \"" + login.UserID + "\", \"Salutation\": \"" + webUser.Salutation + "\", \"Title\": \"" + webUser.Title + "\", \"Name\": \"" + webUser.Name + "\", \"Lastname\": \"" + webUser.Lastname + "\" } ";
然后返回。
但是当我通过 Postman 或我的 android 应用程序使用它时,它看起来像这样:
{ "LoginResult": { \"UserID\": \"" + login.UserID + "\", \"Salutation\": \"" + webUser.Salutation + "\", \"Title\": \"" + webUser.Title + "\", \"Name\": \"" + webUser.Name + "\", \"Lastname\": \"" + webUser.Lastname + "\" }}
这是我不想要的行为,我找不到有关如何阻止这种情况的任何信息。
如何让我的Web服务只返回我写的字符串而不是方法名连接的字符串?
由于我无法真正理解为什么会发生这种情况,我只是搜索是否可以在某处配置此行为,但我什么也没找到。我也没有发现任何搜索这个问题的东西。
编辑:我不认为,这真的会改变很多,但正如有人问的那样,这里是完整的方法,有点混淆:
public string Login(string username, string passwort)
{
string json = "error";
try
{
var login = Namespace.ViewModels.LoginData.SelectByUserNamePassword(username, passwort);
Namespace.Models.WebAppUser webUser = new Namespace.Models.WebAppUser();
lock (webUser)
{
webUser = new Namespace.Controllers.ApplicationController().setWebUserT(Convert.ToInt32(login.UserID), Convert.ToInt32(login.BetriebID), login.BetriebTyp, login.SessionID, login.UniqueID, login.DBName);
}
if (webUser != null && webUser.UserID != -1)
{
json = "{ \"UserID\": \"" + login.UserID + "\", \"Salutation\": \"" + webUser.Salutation + "\", \"Title\": \"" + webUser.Title + "\", \"Name\": \"" + webUser.Name + "\", \"Lastname\": \"" + webUser.Lastname + "\" }";
}
}
catch (Exception ex)
{
SimpleLogger.Exception(ex);
}
return json;
}
答:
我终于找到了答案。
在我的 Serviceclass.svc 派生的接口中,有一个我忽略的指定 fomat。
[WebInvoke(Method = “GET”, UriTemplate = “Login?username={username}&passwort={passwort}”, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] string Login(string username, string passwort);
在这里,我更改了 BodyStyle = WebMessageBodyStyle.Wrapped 这包括将请求添加到响应中:
BodyStyle = WebMessageBodyStyle.Bare
它不再将方法的名称包含在我的 JSON 响应中。
评论