Еще раз: JsonSerializationException: невозможно найти конструктор, который можно использовать для типа «пользовательскийC#

Место общения программистов C#
Ответить
Anonymous
 Еще раз: JsonSerializationException: невозможно найти конструктор, который можно использовать для типа «пользовательский

Сообщение Anonymous »

Я знаю, что этот вопрос уже много раз поднимался, но я просматривал ответы и не смог найти тот, который мне подходит, поэтому прошу у вас помощи:
У меня есть собственный класс [Loadout]:

Код: Выделить всё

public class Loadout                                                        // used to save a players loadout on the server
{
public string name;
public float loadoutID;
public SO_Admiral admiral;
public FM_ShipSave[] shipsInTheLoadout;
public bool selectedLoadout;

public Loadout(string _name, FM_ShipSave[] _ShipSavesArray)
{
name = _name;                                  // later this must come from an input-field
loadoutID = Random.Range(0f, 100000000f);
shipsInTheLoadout = _ShipSavesArray;
}

public Loadout(string _name)
{
name = _name;
shipsInTheLoadout = new FM_ShipSave[0];
}
}
он ​​также включает в себя другие пользовательские классы, такие как:

Код: Выделить всё

public class FM_ShipSave
{
// this class saves ID and position in the array of the ship
public int shipID;
public int tileX;
public int tileZ;

public FM_ShipSave(UnitScript _unit)
{
shipID = _unit.SO_ofThis.getPositioninAllUnitsArray();
tileX = _unit.getTileX;
tileZ = _unit.getTileZ;

}
}
который я сериализую в файл .Json, чтобы отправить его на сервер и сохранить там. Часть сериализации работает отлично:

Код: Выделить всё

var request = new UpdateUserDataRequest                                                    // after what is supposed to happen with the current loadout is determined we upload it to the server
{
Data = new Dictionary                                                   // create a new dicitonary
{
{"Loadouts", JsonConvert.SerializeObject(playerLoadouts)}                           // convert the List playerLoadouts into a .json file
}
};
PlayFabClientAPI.UpdateUserData(request, onDataSend, OnError);                              // then send it to the server, to be stored
Ссылка на картинку Json-редактора
но как только я попытаюсь ее десериализовать:

Код: Выделить всё

List playerLoadouts = JsonConvert.DeserializeObject(_result.Data["Loadouts"].Value);      // turn the jsonback into a List
Я получаю следующую ошибку:

Blockquote
JsonSerializationException: невозможно найти конструктор для использования для типа загрузки. Класс должен иметь конструктор по умолчанию, один конструктор с аргументами или конструктор, отмеченный атрибутом JsonConstructor. Путь '[0].name', строка 1, позиция 9.

Я также попробовал это с другим, более простым классом, и там все работает нормально:

Код: Выделить всё

public class JsonTest
{
public string name;

public JsonTest(string _name)
{
name = _name;
}
}
Отправить:

Код: Выделить всё

// to test serialization
JsonTest _test = new JsonTest("test");
var request2 = new UpdateUserDataRequest                                                     // after what is supposed to happen with the current loadout is determined we upload it to the server
{
Data = new Dictionary                                                   // create a new dicitonary
{
{"test", JsonConvert.SerializeObject(_test)}                                        // convert the List playerLoadouts into a .json file
}
};
Извлечь:

Код: Выделить всё

public void testDeserialization(GetUserDataResult _result)
{
JsonTest _retrievedTest = JsonConvert.DeserializeObject(_result.Data["test"].Value);      // turn the jsonback into a List

Debug.Log("retrieved test deserialization name: " + _retrievedTest.name);
}
Поэтому я пришел к выводу, что это как-то связано с моими пользовательскими классами, но не знаю, как это исправить. Должен ли я написать собственный десериализатор? Или, может быть, есть другое решение?
Я следовал этому руководству по созданию и загрузке json-файлов:
Ссылка на руководство на YouTube
Я пишу код для Unity на Mac с помощью Visual Studio.
Спасибо за помощь.

Подробнее здесь: https://stackoverflow.com/questions/719 ... to-use-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»