【问题标题】:Deserializing JToken content to an Object将 JToken 内容反序列化为对象
【发布时间】:2015-04-14 01:15:08
【问题描述】:

我想将 JToken 内容反序列化为一个对象 (User)。我怎么能做到这一点?

这是我的 json 字符串:

string json = @"[{""UserId"":0,""Username"":""jj.stranger"",""FirstName"":""JJ"",""LastName"":""stranger""}]";

这将作为JToken发送到一个api参数。

用户类别:

public class user
{
    public int UserId {get; set;}
    public string Username {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

Web API 方法:

public IHttpActionResult Post([FromBody]JToken users)
{
      UserModel.SaveUser(users);
      //...
}

Salesforce 中的 API 调用:

string json = '[{"UserId":0,"Username":"jj.stranger","FirstName":"JJ","LastName":"stranger"}]';
HttpRequest req = new HttpRequest();
HttpResponse res = new HttpResponse();
Http http = new Http();
            
req.setEndpoint('test.com/api/UserManagement');
req.setMethod('POST');
req.setBody(json);
req.setHeader('Content-Type', 'application/json');
            
try {
    res = http.send(req);
} catch(System.CalloutException e) {
    System.debug('Callout error:' + e);
}
            
System.debug(res.getBody());

【问题讨论】:

    标签: c# json salesforce json.net asp.net-web-api2


    【解决方案1】:

    您可以使用 JToken.ToObject 泛型方法。 http://www.nudoq.org/#!/Packages/Newtonsoft.Json/Newtonsoft.Json/JToken/M/ToObject(T)

    服务器 API 代码:

     public void Test(JToken users)
     {
         var usersArray = users.ToObject<User[]>();
     }
    

    这是我使用的客户端代码。

    string json = "[{\"UserId\":0,\"Username\":\"jj.stranger\",\"FirstName\":\"JJ\",\"LastName\":\"stranger\"}]";
    HttpClient client = new HttpClient();
    var result = client.PostAsync(@"http://localhost:50577/api/values/test", new StringContent(json, Encoding.UTF8, "application/json")).Result;
    

    对象被转换为用户数组,没有任何问题。

    【讨论】:

    • 我用过这个,类似 List&lt;User&gt; userList = users.ToObject&lt;List&lt;User&gt;&gt;(); 但是它给了我一个错误,Error converting value
    • 你可以试试 users.ToObject()。我认为 JSON.net 将对象视为一个数组。同时我会尝试在我的机器上复制它。
    • 我现在试了一下,效果很好。你是如何调用 API 的?你能分享你用于调用的代码吗?
    • 查看我更新的问题。但是我不是通过调用 API 来测试它,我创建了一个控制台项目来测试deserialization
    • ListArray 尝试了哪一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2021-12-16
    • 2020-05-10
    相关资源
    最近更新 更多