JSON Функция Serialize возвращает пустую строку - PullRequest
0 голосов
/ 21 марта 2020

Я искал это в Google и пробовал все, чтобы это исправить, но все же проблема остается. В основном у меня есть класс C#, где я смоделировал кредитную карту. Я использую Microsoft JsonSerializer из пакетов Nuget для сериализации этого объекта, но он возвращает пустую строку. Класс:

public class CreditCard
{
    public string cardNumber;
    public string cvv;
    public string owner;
    public string type;
    public string bank;
    public string expiry_date;

    public CreditCard(string cardNumber, string cvv, string owner, string type, string bank, string expiry_date)
    {
        this.cardNumber = cardNumber;
        this.cvv = cvv;
        this.owner = owner;
        this.type = type;
        this.bank = bank;
        this.expiry_date = expiry_date;
    }


    public CreditCard() 
    {

    }

    internal object getId()
    {
        return type + " " + cardNumber + " " + owner + " " + bank; 
    }
}

И когда я делаю:

CreditCard creditCard = new CreditCard(cardNumber, cvv, owner, type, bank, expiry_date);
string json = JsonSerializer.Serialize(creditCard);

Строка json пуста. Обратите внимание, что аргументы - это просто строки из значений текстового поля. Я попытался добавить пустой конструктор, чтобы увидеть, может ли это быть проблемой, но безрезультатно. Эта ошибка начиналась только тогда, когда я переключился с NewtonsoftJson на JsonSerializer, поэтому я не знаю, в этом ли проблема. Любая помощь будет оценена :)

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Вы говорите, что проблема началась после переключения на JsonSerializer.

Возможно, JsonSerializer сериализуется с использованием свойств, но у вас есть только поля.

ПРИМЕЧАНИЕ: как указано @ psychoboi111, это: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to

Следовательно;

Либо реализуйте данные класса в качестве свойств (наличие полей publi c не является хорошей практикой в ​​любом случае),

или посмотрите документацию JsonSerializer для сериализации с использованием полей.

Изменить поля на свойства на самом деле очень просто:

public string cardNumber {get; set;}
2 голосов
/ 21 марта 2020

Пожалуйста, прочитайте это: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to

Имеет четкие состояния:

По умолчанию все публичные c свойства сериализуются. Вы можете указать свойства для исключения.

В настоящее время поля исключены.

Поэтому вам необходимо преобразовать поля в свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...