У меня есть серия сообщений, отправляемых на серверное приложение от мобильного клиента. Каждое сообщение имеет некоторую общую информацию (MAC, метки времени и т.д.) и его Так ObjMessage
является базовым классом, который имеет MessageInfo
и TransactionInfo
класс, то у меня есть ObjReqMsg1
и ObjReqMsg2
, которые различаются для ИНТ и свойстве строки, только для тестирования ,Отправка списка гетерогенных объектов
// Сообщения классов
[ProtoContract]
public class MessageInfo
{
[ProtoMember(1)]
public string MAC { get; set; }
[ProtoMember(2)]
public string version { get; set; }
[ProtoMember(3)]
public Guid guidMessage { get; set; }
[ProtoMember(4)]
public DateTime timeGenerated { get; set; }
}
[ProtoContract]
public class TransactionInfo
{
[ProtoMember(1)]
public string user1 { get; set; }
[ProtoMember(2)]
public string user2 { get; set; }
[ProtoMember(3)]
public DateTime timeOperation { get; set; }
}
[ProtoContract]
public class ObjMessage
{
[ProtoMember(1)]
public TransactionInfo transactionInfo { get; set; }
[ProtoMember(2)]
public MessageInfo messageInfo { get; set; }
}
// СПИСОК различных сообщений
[ProtoContract]
public class ObjReqMsg1 : ObjMessage
{
[ProtoMember(1)]
public int intValue { get; set; }
}
[ProtoContract]
public class ObjReqMsg2 : ObjMessage
{
[ProtoMember(1)]
public string stringValue { get; set; }
}
[ProtoContract]
public class ReqListMessages : IReturn<RespListMessages>
{
[ProtoMember(1)]
public List<ObjMessage> objsReqMessage { get; set; }
}
Всех моих тестов сделаны с JSon и протокольными буферами, и отправка отдельных сообщений из списков eterogeneous сообщений работает.
Мои вопросы: 1) моя идея, вместо того чтобы отправить десять ObjReqMsg1
запросов, чтобы сделать только один запрос с List<ObjReqMsg1>
, чтобы сэкономить на сетевых вызовов. Это работает, и на самом деле это экономит время, это имеет смысл? Или было бы правильнее сделать 10 звонков?
2) Тогда, если это имеет смысл, и это правильный путь, я думал, что это было бы здорово, вместо того, чтобы сделать два List<ObjReqMsg1>
и List<ObjReqMsg2>
вызовов, чтобы сделать один List<ObjMessage>
вызов, и на чеке сервера, если каждый ObjMessage
является ObjReqMsg1
или ObjReqMsg2
, литые и действующие соответственно. Возможно ли это?
Если это то, что я делаю неправильно, потому что, когда я создаю List<ObjMessage>
добавление 3 ObjReqMsg1
и 3 ObjReqMsg2
, и проверки с инспектором, что intValue
и stringValue
присутствуют, когда я делаю:
string serialized = ServiceStack.Text.JsonSerializer.SerializeToString<ReqListMessages>(reqListMessage);
Я не нашел intValue
и stringValue
сериализован.
И, очевидно, на стороне сервера я получаю список из 6 ObjMessage
, а не список из 3 ObjReqMsg1
+ 3 ObjReqMsg2
.
Вы можете помочь?
спасибо, добавив, что ProtoInclude сделал работу eveything, с protobuf. Но пытаясь заставить его работать и с сериализатором json sericestack, я нашел много ответов о мифах, которые отговаривают мой подход (DTO не определены), поэтому я, вероятно, поеду с DTO со списком и списком вместо одиночный Список . –