powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как сериализовать объект вручную ?
10 сообщений из 10, страница 1 из 1
Как сериализовать объект вручную ?
    #40069308
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите пожалуйста, можно ли возвращать объект сериализованный вручную ?
Например, есть объект TPerson у которого есть свой метод ToJsonString;
Я хочу, что метод сервиса возвращал Json именно из этого метода.
т.к. объект сам лучше знает, как себя сериализовывать.

Небольшой пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
using Newtonsoft.Json.Linq;

{
    public class TPerson
    {
        public string FullName { get; set; }
        public string PhoneNumber { get; set; }

        public string ToJsonString()
        {
            var Obj = new JObject();
            Obj.Add("ПолноеИмя", FullName);
            Obj.Add("Телефон", PhoneNumber);
            return Obj.ToString();
          
        }
    }


    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet]
        public TPerson Get()
        {
            var P = new TPerson();
            P.FullName = "Vasya";
            P.PhoneNumber = "112";

            return P;
//          return P.ToJsonString(); //Вот так
        }

      
    }
}

...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069311
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, можно сделать так, что бы метод возвращал string или JObject
Но думаю, что это не правильный путь.
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069326
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В текущем варианте что не работает то?
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069340
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

Тип не тот.
Сервис должен вернуть TPerson.
А метод ToJsonString возвращает string
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069343
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дак возвращай не TPerson, а Stream или String.
Но по факту, это нарушение 1 принципа SOLID, у вас класс, который отвечает за хранение данных, отвечает и за их загрузку\сохранение, что уже вызывает массу вопросов. По сути это DTO тип и ничего кроме как полей и свойств этому типу лучше не иметь.
процессом социализации можно управлять, для этого достаточно погуглить 5 минут, чтоб разобраться
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069347
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
это нарушение 1 принципа SOLID

Хорошо.
Я создам отдельный класс сериализатор, который на вход получит TPerson, а на выходе тот Json, который мне нужен.
Что это изменит ?
Как заставить метод использовать этот сериализатор ?
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069354
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Newtonsoft.Json ?

Код: c#
1.
2.
[JsonProperty(PropertyName = "ПолноеИмя")
public string FullName { get; set; }
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069359
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
Newtonsoft.Json ?

Да.
Newtonsoft.Json в целом работает правильно.
И кстати, в по умолчанию используется не он.

Но для одного метода сервиса мне нужен именно мой собственный сериализатор.
В данном случае, я встроил его сразу в TPerson, и не знаю, как включить.
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069362
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите на такой вариант: https://stackoverflow.com/a/11953734
...
Рейтинг: 0 / 0
Как сериализовать объект вручную ?
    #40069371
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Да, получилось.
Надо создать класс сериализатор и класс сериализатора прописать атрибутом к TPerson.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
    class TPersonConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return true;
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (value is TPerson)
            {
                var p = value as TPerson;
                writer.WriteStartObject();
                writer.WritePropertyName("ПолноеИмя");
                serializer.Serialize(writer, p.FullName);
                writer.WritePropertyName("Телефон");
                serializer.Serialize(writer, p.PhoneNumber);
                writer.WriteEndObject();
            }

        }
    }

    [JsonConverter(typeof(TPersonConverter))]
    public class TPerson
    {
        public string FullName { get; set; }
        public string PhoneNumber { get; set; }
    }



Но теперь не понимаю, почему метод сервиса работает через Newtonsoft.Json.
Я его поставил как пакет нугет.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как сериализовать объект вручную ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]