Нам нужно зарегистрировать наш сигнал из функции AppConfig.ready()
. ссылка и здесь нам нужно подключить наш сигнал. Надеюсь, что это решит вашу проблему. Еще одна дополнительная вещь, если ваше приложение не является частью INSTALLED_APPS
, не забудьте добавить init .py
Я хотел бы добавить дополнительную ссылку [ 114], пожалуйста, пройдите раздел Where Should the Code Live?
, чтобы устранить ваши сомнения.
Используйте JavaScriptSerializer. Он находится в пространстве имен System.Web.Script.Serialization и реализован в платформе 3.5 в сборке System.Web.Extensions.dll.
С помощью этого класса вы можете сериализовать любой POCO независимо от того, помечен ли он как [Serializable] или нет. , Для использования сериализации JSON ваша программа не обязательно должна быть веб-приложением. Вот пример:
public class Unserializable
{
public int Age { get; set; }
public int ID { get; set; }
public string Name { get; set; }
}
public class Program
{
static void Main()
{
var u = new Unserializable
{
Age = 40,
ID = 2,
Name = "Betty"
};
var jser = new JavaScriptSerializer();
var jsonText = jser.Serialize( u );
// next line outputs {"Age":40,"ID":2,"Name":"Betty"}
Console.WriteLine( jsonText );
}
}
Я бы использовал инструмент генерации кода (mygeneration, T4 и т. Д.) Для генерации DTO для сериализации. ..
Похоже, работа для ... суррогатов сериализации!
Перейдите на http://msdn.microsoft.com/en-us/magazine/cc188950.aspx
для обзора.
Вам не нужно использовать для команды
; find
установит для ERRORLEVEL
одно из этих значений в зависимости от результата:
Если вы получите / установите все члены, у вас будет объект в идентичном состоянии. (Вам может потребоваться рекурсивно просмотреть все ваши объекты, если у вас есть сложные члены.)
Что касается того, как вы храните данные на диске, оба работают в xml или двоичном формате. Если вы хотите увидеть его и сделать его читабельным, тогда используйте XML. (Я бы порекомендовал это для вашего первого удара, поскольку это значительно упростит отладку.)
Другой вариант - использовать шаблон адаптера.
Хорошая новость в том, что вам не придется менять исходный класс. Плохая новость состоит в том, что вы, вероятно, в конечном итоге напишете вдвое больше кода, чем существует в первом «неизменяемом» классе.
В итоге вы получите 2 новых класса: адаптер и новый класс serializble.
] Идея состоит в том, что адаптер знает, как создать класс serizliable, исследуя несериализуемый класс. Чтобы пойти другим путем (из сериализуемого в несериализуемый), вы можете снова использовать адаптер (конечно, здесь я предполагаю, что ваши частные сеттеры на самом деле устанавливаются через параметризованный конструктор).
Непростой обходной путь.
Вероятно, вы хотите только сериализовать / десериализовать поля (частные и общедоступные) в классах и делать это рекурсивно. Вам, вероятно, потребуется использовать отражение, чтобы добраться до них. Не де / сериализуйте свойства, потому что при установке значения свойства могут возникнуть побочные эффекты. Вам также придется рекурсивно де / сериализовать все поля, которые являются объектами. Проблема состоит в том, чтобы знать, где остановиться.
Вам придется сделать несколько серьезных предположений о том, как десериализовать сериализованный объект с помощью отражения. Я должен предположить, что некоторые из полей этих объектов содержат ссылки на другие объекты, и вам также нужно знать, как пройти через все это.
Кроме того, вы ' мне придется вызвать параметризованные конструкторы и надеяться, что вы не причините слишком большого вреда при установке полей с отражением.
Короче говоря, вам может быть лучше создать специальный набор классов-оболочек, который делает наилучшее предположение форма воссоздания ваших проприетарных классов из сериализованного формата. Затем ваши специализированные классы можно сделать сериализуемыми. Это не будет простой задачей.
Тем не менее, генерация кода могла бы упростить задачу идентификации всех полей в классах.
Затем ваши специализированные классы можно сделать сериализуемыми. Это не будет простой задачей.Тем не менее, генерация кода могла бы упростить задачу идентификации всех полей в классах.
Затем ваши специализированные классы можно сделать сериализуемыми. Это не будет простой задачей.Тем не менее, генерация кода могла бы упростить задачу идентификации всех полей в классах.
Это действительно зависит от масштаба вашей проблемы и требуемой производительности.
Если у вас есть 1 проблемный класс, я бы просто написал суррогатный класс, который может сериализовать / десериализовать этот класс. Если вы говорите о сотнях классов, вам, вероятно, понадобится среда сериализации, которая поддерживает все тонкости. Никакая конструкция без параметров не является кошмаром, независимо от того, какую структуру сериализации вы пишете или используете, вам нужно заранее знать параметры, которые нужно передать конструктору. Частные сеттеры / словари / списки и т. Д. Не представляют особой проблемы.
Я написал фреймворк мини-сериализации для Media Browser, который является BSD. Я сосредоточился на производительности, но методы, которые я использую, могут быть адаптированы к вашей проблеме. Можно использовать аналогичные методы, используемые в буферах протокола Марка .
Если производительность вообще не важна, можно довольно быстро закодировать довольно простую структуру сериализации, использующую отражение, все становится сложно, когда вы пытаетесь сохранить производительность.