【问题标题】:Deserialize object into own type in C#在 C# 中将对象反序列化为自己的类型
【发布时间】:2022-11-17 04:46:47
【问题描述】:

我是 c# 的新手,我愿意将对象转换为代表用户的类。我正在从对 API 的 http 请求中检索对象。我的代码是:

 private async void getUser()
        {
            var requestURI = new HttpRequestMessage();
            string url = "https:...";
            requestURI.RequestUri = new Uri(url);
            requestURI.Method = HttpMethod.Get;
            requestURI.Headers.Add("Accept", "application/json");
            HttpResponseMessage responseURI = await client.SendAsync(requestURI);
            if (responseURI.StatusCode == HttpStatusCode.OK)
            {
                Debug.WriteLine("Get User OK");
                var UserString = await responseURI.Content.ReadAsStringAsync();
                Debug.WriteLine("User: " + UserString);
                var UsersJson = JsonConvert.DeserializeObject(UsersString);
                Debug.WriteLine(UserJson);
            }
            else
            {
                Debug.WriteLine("User GET request failed");
            }
        }

输出是:

{
  "Username": "Alice",
  "IP": "192.13.2.2",
  "Levels": "1,2"
}

如何创建类或类型以便稍后将对象反序列化到其中?创建类型/类后,如何将对象反序列化到其中?

谢谢指教

【问题讨论】:

标签: c# object xamarin type-conversion deserialization


【解决方案1】:

您可以使用此网站 - https://json2csharp.com/ - 生成 C# 类。

在这种情况下,类将如下所示:

public class User
{
    public string Username { get; set; }
    public string IP { get; set; }
    public string Levels { get; set; }
}

对于这个类的反序列化,你可以使用如下:

var user = JsonConvert.DeserializeObject<User>(UsersString);

【讨论】:

  • 谢谢!如何访问用户的每个字段?用户.get用户名()?
  • string username = user.用户名;
  • 谢谢!你知道我是否可以从 for 和 un 每次迭代中多次调用 getUser() 函数来创建一个新用户吗?谢谢
  • 你可以这样做。但它是一个异步函数。为避免锁定,请等待呼叫。例如。等待 getUser();
  • 是的,我明白了。但是,如何在每次迭代中创建两个不同的用户?
【解决方案2】:
public class User
{
    public string Username { get; set; }
    public string IP { get; set; }
    public string Levels { get; set; }
}

你像这样反序列化一个对象:请看看这个https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

var user = JsonConvert.DeserializeObject<User>(json);

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多