Получение нулевых значений при преобразовании json в список объектов c # - PullRequest
0 голосов
/ 27 июня 2018

Вот этот json:

[
    {
        "FirstName": "bob",
        "LastName": "ob",
        "Country": "vxv",
        "CityOrTown": "aaaaa",
        "Line1": "3EF1A60C-4en St.dsadsa",
        "PostalCode": "91106",
        "BirthDay": "07",
        "BirthMonth": "06",
        "BirthYear": "2000"
    },
    {
        "FirstName": "bbb",
        "LastName": "bbb",
        "Country": "bbb",
        "CityOrTown": "bbb",
        "Line1": "bbb",
        "PostalCode": "bbb",
        "BirthDay": "06",
        "BirthMonth": "06",
        "BirthYear": "2000"
    }
]

Вот объект, в который я хочу преобразовать этот json:

namespace Stripe
{
    public class StripeAccountAdditionalOwner : INestedOptions
    {
        public StripeAccountAdditionalOwner();

        [JsonProperty("[address][city]")]
        public string CityOrTown { get; set; }

        [JsonProperty("[address][country]")]
        public string Country { get; set; }

        [JsonProperty("[address][line1]")]
        public string Line1 { get; set; }

        [JsonProperty("[address][line2]")]
        public string Line2 { get; set; }

        [JsonProperty("[address][postal_code]")]
        public string PostalCode { get; set; }

        [JsonProperty("[address][state]")]
        public string State { get; set; }

        [JsonProperty("[dob][day]")]
        public int? BirthDay { get; set; }

        [JsonProperty("[dob][month]")]
        public int? BirthMonth { get; set; }

        [JsonProperty("[dob][year]")]
        public int? BirthYear { get; set; }

        [JsonProperty("[first_name]")]
        public string FirstName { get; set; }

        [JsonProperty("[last_name]")]
        public string LastName { get; set; }

        [JsonProperty("verification[document]")]
        public string VerificationDocument { get; set; }
    }
}

Вот код, который я использую в контроллере:

List<StripeAccountAdditionalOwner> AdditionalOwners = JsonConvert.DeserializeObject<List<StripeAccountAdditionalOwner>>(requestData.CompanyOwners);

requestData.CompanyOwners - это массив объектов json.

Примечание: это не дает мне никаких ошибок. Здесь нет пропущенных ссылок, и он без проблем проходит через эту строку кода, однако все значения остаются нулевыми. Заранее спасибо, ребята, я очень ценю.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Используйте это как класс вашей модели

    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class JsonModel
    {
        [JsonProperty("FirstName")]
        public string FirstName { get; set; }

        [JsonProperty("LastName")]
        public string LastName { get; set; }

        [JsonProperty("Country")]
        public string Country { get; set; }

        [JsonProperty("CityOrTown")]
        public string CityOrTown { get; set; }

        [JsonProperty("Line1")]
        public string Line1 { get; set; }

        [JsonProperty("PostalCode")]
        public string PostalCode { get; set; }

        [JsonProperty("BirthDay")]
        public string BirthDay { get; set; }

        [JsonProperty("BirthMonth")]
        public string BirthMonth { get; set; }

        [JsonProperty("BirthYear")]

        public string BirthYear { get; set; }
    }

тогда сделайте это в вашем основном классе

            var data = JsonConvert.DeserializeObject<JsonModel>(jsonstring);
            var country = data.Country;
            var birthday = data.BirthDay;
0 голосов
/ 28 июня 2018

Использование [https://app.quicktype.io/#l=cs&r=json2csharp][1] позволяет создать класс ниже для JSON в вопросе

using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

public partial class Welcome
{
    [JsonProperty("FirstName")]
    public string FirstName { get; set; }

    [JsonProperty("LastName")]
    public string LastName { get; set; }

    [JsonProperty("Country")]
    public string Country { get; set; }

    [JsonProperty("CityOrTown")]
    public string CityOrTown { get; set; }

    [JsonProperty("Line1")]
    public string Line1 { get; set; }

    [JsonProperty("PostalCode")]
    public string PostalCode { get; set; }

    [JsonProperty("BirthDay")]
    public string BirthDay { get; set; }

    [JsonProperty("BirthMonth")]
    public string BirthMonth { get; set; }

    [JsonProperty("BirthYear")]
    [JsonConverter(typeof(ParseStringConverter))]
    public long BirthYear { get; set; }
}

public partial class Welcome
{
    public static Welcome[] FromJson(string json) => JsonConvert.DeserializeObject<Welcome[]>(json, QuickType.Converter.Settings);
}

public static class Serialize
{
    public static string ToJson(this Welcome[] self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}

internal static class Converter
{
    public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
    {
        MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
        DateParseHandling = DateParseHandling.None,
        Converters = {
            new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
        },
    };
}

internal class ParseStringConverter : JsonConverter
{
    public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);

    public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null) return null;
        var value = serializer.Deserialize<string>(reader);
        long l;
        if (Int64.TryParse(value, out l))
        {
            return l;
        }
        throw new Exception("Cannot unmarshal type long");
    }

    public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
    {
        if (untypedValue == null)
        {
            serializer.Serialize(writer, null);
            return;
        }
        var value = (long)untypedValue;
        serializer.Serialize(writer, value.ToString());
        return;
    }

    public static readonly ParseStringConverter Singleton = new ParseStringConverter();
}
...