@Envywewok

Как вывести объект в консоль C#?

Как вывести объект в консоль после десериализации в C#. Я получил ответ от запроса GET, деcериализовал его с помощью библиотеки Newtonsoft и хочу как то проверить результат, вот думаю вывести в консоль только не знаю как. Или может есть другие способы проверить. В Visual Studio можно было прямо в ide раскрыть объект. Но я использую rider и не знаю есть ли там альтернатива этому.
using System;
using System.IO;
using System.Net;
using QuickDeser;

namespace ConsoleApplication2
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            WebRequest request = WebRequest.Create("https://opensky-network.org/api/states/all?lamin=51.421812&lomin=23.139124&lamax=55.961184&lomax=33.472494");
            WebResponse response = request.GetResponse();
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    string line = "";
                   // Console.WriteLine(Welcome.FromJson(line));
                   var welcome = Welcome.FromJson(line);  
                   Console.WriteLine(welcome);
                }     
            }
            response.Close();
            Console.WriteLine("Запрос выполнен");
            Console.Read();
        }
      }
    }
<code lang="cs">
_________________________________________________________________________
это классы для десcериализации брал с сервиса quicktype

<code lang="cs">
namespace QuickDeser
{
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class Welcome
    {
        [JsonProperty("time")] public long Time { get; set; }

        [JsonProperty("states")] public List<List<State>> States { get; set; }
    }

    public partial struct State
    {
        public bool? Bool;
        public double? Double;
        public string String;

        public static implicit operator State(bool Bool) => new State {Bool = Bool};
        public static implicit operator State(double Double) => new State {Double = Double};
        public static implicit operator State(string String) => new State {String = String};
        public bool IsNull => Bool == null && Double == null && String == null;
    }

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

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

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

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

        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
        {
            switch (reader.TokenType)
            {
                case JsonToken.Null:
                    return new State { };
                case JsonToken.Integer:
                case JsonToken.Float:
                    var doubleValue = serializer.Deserialize<double>(reader);
                    return new State {Double = doubleValue};
                case JsonToken.Boolean:
                    var boolValue = serializer.Deserialize<bool>(reader);
                    return new State {Bool = boolValue};
                case JsonToken.String:
                case JsonToken.Date:
                    var stringValue = serializer.Deserialize<string>(reader);
                    return new State {String = stringValue};
            }

            throw new Exception("Cannot unmarshal type State");
        }

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

            if (value.Double != null)
            {
                serializer.Serialize(writer, value.Double.Value);
                return;
            }

            if (value.Bool != null)
            {
                serializer.Serialize(writer, value.Bool.Value);
                return;
            }

            if (value.String != null)
            {
                serializer.Serialize(writer, value.String);
                return;
            }

            throw new Exception("Cannot marshal type State");
        }

        public static readonly StateConverter Singleton = new StateConverter();
    }
}

</code>
  • Вопрос задан
  • 1677 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
1- json это строка, можете просто печатать
2 - если вы хотите проверить свой класс - можете выводить поля с пояснениями (сделать функцию). можете переопределить для своего класса .ToString()

ps используйте панель инструментов для вставки тегов, что то они у вас поломались по ходу. выравнивания вам удалось добиться, а подсветки - нет. читать все равно тяжело
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы