c# - 在控制台应用程序中反序列化 Json

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

我正在创建一个 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());
}

值(value)观

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

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

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

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

最佳答案

我能够成功运行以下命令(基于 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>();
        }
    }

Controller :

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

关于c# - 在控制台应用程序中反序列化 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37816255/

相关文章:

javascript - 解析json时出现 undefined variable 错误

json - 使用 JSONSerialization 序列化货币时指定小数位数

c# - 将多个命名空间添加到 MessageContract WCF 响应对象 (MessageBodyMember)

c# - SSL 页面重定向到另一台服务器上的 SSL 页面

c# - 让 GameObject 悬停在飞机上方? - Unity3D C#

c# - 在 MVC6 中从外部程序集呈现 View

c# - 如何使用 C# 和 Json.NET 解析 Google 的 JSON API 搜索结果?

c# - 在 UpdatePanel 上为动态添加的控件动态添加触发器

json - Spring Integration json 路径表达式转换错误

java - Jackson - 使用注释将第一个数组成员绑定(bind)到对象