Десериализация JSON в объект с помощью частного установщика

У меня проблема с JSON и десериализацией. У меня есть живой производственный код, который использует объект сообщения для передачи информации из одной системы в другую. Идентификатор сообщения очень важен, поскольку он используется для его идентификации. Мы также не хотим, чтобы кто-либо устанавливал идентификаторы и поэтому сделал его частным установщиком.

Моя проблема возникает при попытке десериализации объекта JSON, а идентификатор не установлен. (очевидно, потому что это личное)

Есть ли у кого-нибудь хорошее предложение, как лучше всего действовать? Я пробовал использовать изериализацию, но она проигнорирована. Я пробовал использовать DataContract, но это не удалось из-за внешней системы, из которой мы получаем данные.

Мой единственный вариант в таблице на данный момент - сделать поля ID и TimeCreated общедоступными установщиками.

У меня есть объект как таковой

Message
{
  public Message()
  {
    ID = Guid.NewGuid();
    TimeCreated = DateTime.Now();
  }

  Guid ID { get; private set; } 
  DateTime TimeCreated { get; private set; } 
  String Content {get; set;}

}   

Теперь я использую следующий код:

        var message = new Message() { Content = "hi" };
        JavaScriptSerializer jss = new JavaScriptSerializer();

        var msg = jss.Serialize(message);
        var msg2 = jss.Deserialize<Message>(msg);

        Assert.IsNotNull(msg2);
        Assert.AreEqual(message.ID, msg2.ID);

Поля Id и Time created не совпадают, потому что они частные. Я также пробовал внутренние и защищенные, но здесь тоже не было радости.

Полный объект имеет конструктор, который принимает идентификатор и дату, чтобы установить их при загрузке их из БД.

Любая помощь будет принята с благодарностью. .

Спасибо

9
задан Andrew Newland 10 May 2011 в 20:59
поделиться