это может быть легкое / быстрое решение, но из моего расследования мне не удалось его найти.
public interface IBaseMessage
{
}
public interface IRefreshMessage : IBaseMessage
{
}
Оба реализуются конкретными классами в библиотеке. Сообщение
Они хранятся внутри List<IBaseMessage>
, и когда я сериализую объект для отправки по сети (один за другим), он помечается как IBaseMessage
, даже если некоторые из них IRefrehMessage
Проблема: при десериализации (на другом ПК) они восстанавливаются как IBaseMessage
, и вся информация из IRefreshMessage
теряется.
Предположение: я полагаю, что должен быть какой-то атрибут класса JSON, который позволяет мне указывать, что должно быть сериализовано?
Спасибо и простите за довольно глупый вопрос
Edit:
Использование этого класса для сериализации / десериализации:
using Newtonsoft.Json.Linq;
public class JMessage
{
public Type Type { get; set; }
public JToken Value { get; set; }
public static JMessage FromValue<T>(T value)
{
return new JMessage { Type = typeof(T), Value = JToken.FromObject(value) };
}
public static string Serialize(JMessage message)
{
return JToken.FromObject(message).ToString();
}
public static JMessage Deserialize(string data)
{
return JToken.Parse(data).ToObject<JMessage>();
}
Один раз звонит
string data = JMessage.Serialize(JMessage.FromValue(message));
Я получаю:
{
"Type": "Universal_Tool_Manager.Messages.Message.Interfaces.IBaseMessage, Universal Tool Manager.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"Value": {
"Propagation": 2,
"State": 0
}
}
Надеюсь, это поможет.