将JToken内容反序列化为对象

59
我想将 JToken 内容反序列化为一个对象(User)。我该如何做?

这是我的 JSON 字符串:

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

将此发送到API参数作为JToken

用户类:

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());
2个回答

115
你可以使用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;

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


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Robert Mansion
然而,我并没有通过调用API来测试它,而是创建了一个控制台项目来测试反序列化。 - Robert Mansion
你尝试过使用List还是Array - Robert Mansion
这会有任何区别吗?如果我在我创建的控制台项目中测试它,嗯,但我会尝试调用API。 - Robert Mansion
我感激您的帮助 :) - Robert Mansion
显示剩余9条评论

0
--这对我有用,Json超级庞大,有111000行--
//String of keys to search deepin the Json for the desired objects
public string sTokenKeys = "results.drug.drugsfda.partitions";

//Read the download.json file into its objects.                
StreamReader reader = new StreamReader(JsonFileLocation);
var json = reader.ReadToEnd();
var data = JObject.Parse(json);   //Get a JObject from the Json
// Find the desired tree branch by the token keys
var partitionsJObject = data.SelectToken(sTokenKeys).ToList();
// get the array of JTokens and serialize-deserialize into 
// appropriate object 
var partitions = JsonConvert.DeserializeObject<List<Partition>>(JsonConvert.SerializeObject(partitionsJObject));

//now i can read the List<Partition>> partitions object for the 
// values im looking for

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接