Неправильная сериализация в C # с использованием JSON.NET

Я пытаюсь взять объект с такой структурой

public class Item
{
   public Guid SourceTypeID {get;set;}
   public Guid BrokerID {get;set;}
   public double Latitude {get;set;}
   public double Longitude {get;set;}
   public DateTime TimeStamp {get;set;}
   public object Payload {get;set;}
}

и сериализовать это с JSON.NET с помощью вызова типа:

Item expected = new Item()
{
   SourceTypeID = Guid.NewGuid(),
   BrokerID = Guid.NewGuid(),
   Latitude = 33.657145,
   Longitude = -117.766684,
   TimeStamp = DateTime.Now,
   Payload = new byte[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
};
string jsonString = JsonConvert.SerializeObject(expected);

Член полезной нагрузки объекта Item потенциально будет содержать любой примитив из списка примитивов C # (плюс несколько других, таких как Guid), или массив этих типов (как в Например, байтовый массив) или «плоский» объект, состоящий из любого из перечисленных ранее «примитивов» (создаваемых динамически).

Когда я выполняю вызов SerializeObject (), создаваемая строка содержит:

{"Payload":"AAECAwQFBgcICQ==","SourceTypeID":"d8220a4b-75b1-4b7a-8112-b7bdae956a45",
 "BrokerID":"951663c4-924e-4c86-a57a-7ed737501dbd",
 "TimeStamp":"\/Date(1328202421559-0600)\/",
 "Latitude":33.657145,"Longitude":-117.766684}

Однако, когда я вызываю десериализацию, созданный элемент частично неверен.

Item actual = JsonConvert.DeserializeObject<Item>(jsonString);

actual.SourceTypeID : {00000000-0000-0000-0000-000000000000}
actual.BrokerID : {951663c4-924e-4c86-a57a-7ed737501dbd}
actual.Latitude : 33.657145;
actual.Longitude : -117.766684;
actual.TimeStamp : {2/2/2012 11:07:01 AM}
actual.Payload : null

Член SourceTypeID (Guid) и полезная нагрузка member (объект, содержащий byte []), оба неверны. Сериализованная строка, похоже, содержит правильную идентификацию для guid, но не для байтового массива.

Я вижу, что альтернативная сигнатура SerializeObject -

SerializeObject(object value, params JsonConverter[] converters);

. Это правильный способ сообщить механизму де / сериализации о типах, которые он явно неправильно обрабатывает? Поскольку я работаю с ограниченным набором «примитивов» в основе моего объекта, если бы я мог создать набор преобразователей для каждого из этих типов, решило бы это мою проблему?

Я хочу по возможности не изобретать велосипед, так как кажется, что это проблема, которая уже была изящно решена, и я хотел бы использовать что-то подобное, если таковое имеется.

6
задан user1185689 2 February 2012 в 18:11
поделиться