Всем добрый день. Помогите пожалуйста решить проблему с переводом класса в байт. У меня есть класс, который я сам создал и теперь я хочу чтобы он передал этот класс клиенту, но он мне пишет
System.IO.InvalidDataException: cannot serialize(): Lib2D.Vector2, где Vector2 это мой класс. То есть как я понял он не может его перевести в байты, вот почему то с классом System.Collections.Generic.List такого нет, и вот у меня возникает вопрос, а как мне сделать?
Да я не понял постановку вашего вопроса. Vector2 - это ваш класс. А Vector2 имеет какую-то структуру данных или что? Просто перевод какой-либо структуры данных в последовательность байтов называется сериализацией. Клиент какие типы принимает?
Ясно. Реализация на Unity. Вам необходима сериализация данных. И Vector2 - это не класс, а структура. Попробуйте из данной ссылки реализовать сериализацию: stackoverflow.com/questions/27357088/unity-listt-s...
У меня есть своя сериализация данных. Но не знаю, насколько применима для вашей реализации. Так как моя реализация требует небезопасной компиляции.
public class Vector2: ISerializable
{
public int x { get; set; }
public int z { get; set; }
public Vector2(int x1, int z1)
{
x = x1;
z = z1;
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("x", x);
info.AddValue("z", z);
}
}
Вот так получилось, но все равно ERROR Photon.SocketServer.PeerBase [(null)] - System.IO.InvalidDataException: cannot serialize(): Lib2D.Vector2
[Serializable]
public class Vector2: ISerializable
{
public int x { get; set; }
public int z { get; set; }
public Vector2(int x1, int z1)
{
x = x1;
z = z1;
}
protected Vector2(SerializationInfo info, StreamingContext context)
{
//map all your properties here
x = Convert.ToInt32(info.GetBoolean("x"));
z = Convert.ToInt32(info.GetBoolean("z"));
//...
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("x", x);
info.AddValue("z", z);
}
}
AquariusStar: В качестве эксперимента попробовал сделать так
List<Array> a = new List<Array>();
OperationResponse newresponse = new OperationResponse(2);
newresponse.Parameters = new Dictionary<byte, object> { { 0, a as object } };
SendOperationResponse(newresponse, sendParameters);