У меня есть две отдельные программы, которым необходимо обмениваться информацией. Это совместное использование будет выполнено одним приложением, помещающим XML serialized
объект в базу данных, а другое приложение будет загружать его на другую машину. Объекты имеют одни и те же variables
но properties
и methods
разные.
В результате я использовал библиотеку Newtonsoft.Json
вместо xml
и использовал <JsonObject(MemberSerialization.OptIn)>
и JsonProperty()
для управления сериализацией.
Вы не указали, какой тип сериализации вы использовали.
Стандартный бинарный сериализатор NET не подходит для обмена данными между двумя различными сборками. Когда вы перейдете к десериализации, вы получите сообщение об ошибке, аналогичное [Culture].[Assembly].[Version].SourceClass
нельзя десериализовать в [Culture].[Assembly].[Version].DestClass
. Это произойдет, даже если классы идентичны.
Существует несколько способов обойти это. A) Используйте одну и ту же служебную DLL с обеих сторон для выполнения сериализации B) обманите ее в десериализацию с помощью переопределения, чтобы сообщить соответствующий класс Culture-Assembly-Version-Class, но это кажется изворотливым или C) использовать сериализацию XML, но это делает для очень многословного вывода, который также читается.
Для двоичной сериализации, а не бинарного форматирования NET, есть ProtoBuf-NET, которая быстрее, производит намного меньший результат и использует почти идентичный синтаксис.
How exact do the classes have to match between the two programs
ProtoBuf использует числовой индекс, а не имя свойства, поэтому они не должны быть слишком похожими. Конечно, должно быть какое-то сходство, или адресат может не иметь понятия, что представляют данные. Код в классе может быть совсем другим, потому что он остается помещенным.
Сериализация хранит только данные для переменных-объектов, свойств и т.д. Пока типы данных совместимы, они должны работать. Для функций вам не требуется строка за строкой.
Все зависит от используемого вами сериализатора. Некоторые требуют идеального соответствия, другие, как правило, более слабо связаны с объектами.
Насколько точны классы для соответствия между двумя программами?
Ну, совсем нет. Но они должны быть похожими, потому что в противном случае сериализация не имеет смысла.
Является ли строка совпадений строками, именами переменных и методов?
Как указано выше: должно быть некоторое перекрытие. Обычно имена свойств должны быть одинаковыми. Но, конечно, вы также можете предоставить настраиваемое сопоставление.
Взгляните на библиотеку Newtonsoft, вы можете использовать ее (для json) следующим образом:
JsonConvert.DeserializeObject<IEnumerable<Unit>>(result);
Он не зависит от метода объекта, который сериализовал строку.