反序列化没有根对象和1个数组的json的ASP.NET MVC

马歇尔·弗里曼

我正在构建使用第三方API的Web应用程序,并且收到以下json

 {
"CompanyID": 14585,
"CompanyName": "The Morgan Group Daytona, LLC",
"BillingAddressLine": "100 S Beach St #200",
"BillingAddressCity": "Daytona Beach",
"BillingAddressState": "Fl",
"BillingAddressPostCode": "32114",
"BillingCountryCode": "US",
"BillingAddress": "100 S Beach St #200\r\nDaytona Beach Fl 32114\r\nUNITED STATES",
"Phone": null,
"Fax": null,
"website": null,
"TaxNumber": null,
"Comments": null,
"CurrencyCode": "USD",
"DefaultTradingTermIDFK": 15,
"DateCreated": "2020-09-04T18:25:02",
"DateUpdated": "2020-09-04T18:25:02",
"Contacts": [
    {
        "ContactID": 13781,
        "CompanyIDFK": 14585,
        "CompanyName": null,
        "Firstname": "Test",
        "Lastname": "User",
        "Email": "[email protected]",
        "Phone": null,
        "Mobile": "4075551234",
        "PositionTitle": "Test Title",
        "TimeZone": "Eastern Standard Time",
        "DateCreated": "2020-09-07T02:21:10",
        "DateUpdated": "2020-09-07T02:21:10"
    }
]
}

其他API调用的所有其他json响应也没有根对象。目的是使用剃刀在视图上显示此信息。最有效的方法是什么?

到目前为止,我已经创建了此类文件

public class Contact    {
    public int ContactID { get; set; } 
    public int CompanyIDFK { get; set; } 
    public object CompanyName { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
    public object Phone { get; set; } 
    public string Mobile { get; set; } 
    public string PositionTitle { get; set; } 
    public string TimeZone { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateUpdated { get; set; } 
}

public class Root    {
    public int CompanyID { get; set; } 
    public string CompanyName { get; set; } 
    public string BillingAddressLine { get; set; } 
    public string BillingAddressCity { get; set; } 
    public string BillingAddressState { get; set; } 
    public string BillingAddressPostCode { get; set; } 
    public string BillingCountryCode { get; set; } 
    public string BillingAddress { get; set; } 
    public object Phone { get; set; } 
    public object Fax { get; set; } 
    public object website { get; set; } 
    public object TaxNumber { get; set; } 
    public object Comments { get; set; } 
    public string CurrencyCode { get; set; } 
    public int DefaultTradingTermIDFK { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateUpdated { get; set; } 
    public List<Contact> Contacts { get; set; } 
}

但是现在我一直试图找出如何反序列化这样的东西?最简单的方法是这样做。我似乎找不到其他符合此相同情况的帖子。

安迪

当您收到一滴JSON时,可以通过访问https://json2csharp.com/并将其转换为类来加快处理速度例如,该blob返回以下内容:

public class Contact    {
    public int ContactID { get; set; } 
    public int CompanyIDFK { get; set; } 
    public object CompanyName { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    public string Mobile { get; set; } 
    public string PositionTitle { get; set; } 
    public string TimeZone { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateUpdated { get; set; } 
}

public class Root    {
    public int CompanyID { get; set; } 
    public string CompanyName { get; set; } 
    public string BillingAddressLine { get; set; } 
    public string BillingAddressCity { get; set; } 
    public string BillingAddressState { get; set; } 
    public string BillingAddressPostCode { get; set; } 
    public string BillingCountryCode { get; set; } 
    public string BillingAddress { get; set; } 
    public string Phone { get; set; } 
    public string Fax { get; set; } 
    public string website { get; set; } 
    public string TaxNumber { get; set; } 
    public string Comments { get; set; } 
    public string CurrencyCode { get; set; } 
    public int DefaultTradingTermIDFK { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateUpdated { get; set; } 
    public List<Contact> Contacts { get; set; } 
}

它返回的类有时会遇到一些小问题,例如,由于您的Blob具有很多null属性,因此它将它们转换为object我将其更改为string

然后,您只需使用Newtonsoft.Json转换它:

using(var s = File.OpenRead(@"c:\users\andy\desktop\test.json"))
using(var sr = new StreamReader(s))
using(var jtr = new JsonTextReader(sr))
{
    var obj = new JsonSerializer().Deserialize<Root>(jtr);
}

到此为止: json

您发布了获取此数据的代码,并注意到您正在使用WebRequest只是一个提示,这WebRequest是您应该使用的HttpClient这是通过以下方式下载/反序列化的方式HttpClient

private static readonly HttpClient _httpClient = new HttpClient();

private static async Task<Root> GetStuffFromThereAsync(string token)
{
    using(var req = new HttpRequestMessage(HttpMethod.Get,
        new Uri("https://www.example.com")))
    {
        req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
        using (var resp = await _httpClient.SendAsync(req))
        {
            resp.EnsureSuccessStatusCode();
            using (var s = await resp.Content.ReadAsStreamAsync())
            using (var sr = new StreamReader(s))
            using (var jtr = new JsonTextReader(sr))
            {
                return new JsonSerializer().Deserialize<Root>(jtr);
            }
        }
    }
}

如果仍在返回null,则您的模型有可能不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从ASP.NET MVC控制器方法返回由JSON.NET序列化的camelCase JSON?

如何反序列化没有名称的JSON.NET对象?

将没有根对象的json反序列化为c#/ vb.net类

用Json.Net反序列化对象数组

使用Json.NET 8.0.1无法反序列化具有字节数组属性的对象

如何在ASP.NET MVC控制器中反序列化JSON数组数据

.NET MVC无法反序列化JSON

在ASP.NET MVC的控制器中没有序列化的select2值

迁移到ASP.Net Core MVC时JSON序列化/反序列化不起作用

Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

如何在ASP.NET MVC 5控制器上从JSON反序列化为抽象参数

在C#ASP.NET中使用RestSharp和JSON.Net反序列化JSON数组

Json.net没有反序列化对象列表

Newtonsoft Json.NET序列化的对象未在ASP.NET MVC视图中正确呈现

Spring MVC可以反序列化可以是对象或数组的JSON吗?

ASP.NET MVC捕获序列化maxJsonLength违反

Asp.net MVC在控制器中反序列化Kendo Grid数据

ASP.NET MVC4将带有'ExtraElements'的JSON反序列化为c#ViewModel

Json.NET反序列化根和子模式数据

Json使用ASP.NET MVC和Json.Net反序列化View中显示的输出

Json反序列化和使用c#和ASP.NET MVC和JSON.NET打印非原始对象

C#JSON.net无法从文件反序列化和重新序列化对象

.NET MVC jQuery AJAX-作为参数的JSON对象未序列化值

如何用无意义的动态键名反序列化根对象?Json.NET

JSON反序列化对象-.NET

JSON.NET 反序列化和删除对象

ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

C# JSON.net 没有正确创建对象作为反序列化字典中的值

使用 Asp.net MVC 序列化 Json 数组