【问题标题】:Deserializing Json in Console App在控制台应用程序中反序列化 Json
【发布时间】:2016-10-15 10:28:28
【问题描述】:

我正在创建一个 Web API 端点,它将作为一项服务来检索我们的应用程序配置、进行日志记录等。我遇到的问题是能够在控制台应用程序中反序列化 Json。

设置

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
}

网络 API

[HttpGet]
[Route("Person")]
public IHttpActionResult GetPerson()
{
    Person person = new Person
    {
        FirstName = "Steve",
        LastName = "Rogers",
        DateOfBirth = new DateTime(1920, 7, 4)
    };

    return Ok(JsonConvert.SerializeObject(person));
}

控制台应用程序

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost");

    var response = client.GetAsync("api/Person").Result;
    var data = response.Content.ReadAsStringAsync().Result;
    var person = DeserializeJson<Person>(data);
}

public static T DeserializeJson<T>(string input)
{
    var result = JsonConvert.DeserializeObject(input);
    var result2 = JsonConvert.DeserializeObject(result.ToString());
    return JsonConvert.DeserializeObject<T>(result2.ToString());
}

价值观

数据 = "\"{\\"FirstName\\":\\"Steve\\",\\"LastName\\":\\"Rogers\\",\\"DateOfBirth\\":\ \"1920-07-04T00:00:00\\"}\""

结果 = "{\"FirstName\":\"Steve\",\"LastName\":\"Rogers\",\"DateOfBirth\":\"1920-07-04T00:00:00\" }"

结果2 = {{ “名字”:“史蒂夫”, “姓氏”:“罗杰斯”, “出生日期”:“1920-07-04T00:00:00” }}

我遇到的问题是,在第三次反序列化之前,我无法反序列化为 Person 对象。 result2 中的值是我唯一能够成功反序列化为 Person 的值。有没有更有效的方法来完成这种反序列化?最好不要进行 3 次迭代。

【问题讨论】:

  • 我认为 JsonConvert.SerializeObject(person) 在 Web API 答案中可能没用,并且可以更改响应格式,您是否尝试仅返回类似:return Ok(person);来自你的 web api 端点?
  • 我尝试了string 的返回类型以及使用.SerializeObject() 的不同Formatting 重载仍然没有运气。
  • 并且不使用 .SerializeObject() ?
  • WebApi默认将其序列化。
  • 当然,这就是为什么不需要执行 JsonConvert.SerializeObject(person) :)

标签: c# json serialization asp.net-web-api deserialization


【解决方案1】:

我能够成功运行以下内容(基于this Microsoft article):

控制台应用:

    static void Main(string[] args)
    {
        RunAsync().Wait();
    }

    static async Task RunAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:3963/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("api/Person");
            Person product = await response.Content.ReadAsAsync<Person>();
        }
    }

控制器:

public class PersonController : ApiController
{
    public Person GetPerson()
    {
        Person person = new Person
        {
            FirstName = "Steve",
            LastName = "Rogers",
            DateOfBirth = new DateTime(1920, 7, 4)
        };
        return person;
    }
}

【讨论】:

    【解决方案2】:

    其他解决方案:

    1. 将 Newtonsoft.Json 添加到项目中。

    enter image description here

    1. 在你的类中添加 using-> using Newtonsoft.Json;
    2. 解析它 -> 字符串 json = JsonConvert.SerializeObject(object);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多