Я читал статьи о преимуществах отправки сериализованных объектов по сети. Стоимость производительности и размера.
Некоторые рассказали о DataContract и использовании сериализации JSON или XML.
Но я не могу найти статьи о том, что произойдет, если я не использую эти атрибуты и возвращаю объект, предполагая, что свойства и состояния моего объекта относятся к примитивным типам. Очевидно, что когда я использую сериализатор, такой как DataContractJsonSerializer, и конкретно его метод WriteObject, он выдает исключение.
Что произойдет, если я верну, например, в методе веб-службы объект типа Employee с атрибутом "Сериализуемый". Я имею в виду, что бы .net обработал этот результат.
[WebMethod]
public Employee SendEmployeeData()
{
}
Объект будет отправлен по сети в виде двоичного потока или как?
Требуется ли сериализовать объект, чтобы отправить его по сети?
Я также читал, что DataContractSerializer будет интерпретировать атрибут Serializable.
разница между атрибутом DataContract и атрибутом Serializable в .NET
2 ответа
Я имею в виду, что бы .net обрабатывал этот результат.
Это будет полностью связано с используемой вами структурой/фреймворками. WCF будет работать иначе, чем ASMX, который будет работать иначе, чем MVC, который будет… бла-бла-бла.
Объект будет отправлен по сети в виде двоичного потока или как?
Да; TCP-потоки — это потоки
Требуется ли сериализовать объект, чтобы отправить его по сети?
Да; вы можете отправить только серию байтов через данные; процесс преобразования объекта в последовательность байтов называется сериализацией.
Я также читал, что DataContractSerializer будет интерпретировать атрибут Serializable.
Ну... как бы... это не самое удачное использование, и похоже на использование BinaryFormatter
(может использоваться NetDataContractSerializer
, но это имеет большинство тех же проблем) - в основном : не делайте этого. Если вы используете API, предназначенный для обмена контрактами данных, используйте контракт данных. Здесь нет «лучшего» подхода; все сводится к тому, что вы пытаетесь сделать и каковы ваши приоритеты. JSON и XML имеют преимущества совместимости по сравнению с BinaryFormatter
и др., но есть и другие варианты с теми же преимуществами.
[Serializable]
, это BinaryFormatter
, которую вы все равно не должны использовать; главное, что использует BinaryFormatter
без вашего ведома, — это удаленное взаимодействие, которое вам не следует использовать в любом случае. Поэтому, если вы не используете вещи, требующие [Serializable]
, нет, вам не нужно добавлять [Serializable]
.
Если я правильно помню, DataContractSerializer довольно явно требует аннотаций атрибутов для всех свойств и объектов, которые необходимо сериализовать. Я могу ошибаться в этом, хотя: прошло некоторое время с тех пор, как я использовал его.
Они определенно не будут сериализованы автоматически с помощью BinaryFormatter. Атрибут Serializable — это просто маркер, указывающий BinaryFormatter сериализовать объект.
Json.NET (на который я ссылался в своем комментарии) будет использовать отражение для построения сериализованной структуры данного объекта - даже dynamic
. Следующий код создаст динамический объект и преобразует его в строку JSON с помощью JSON.net:
//build request
var dynamicObject = new {
message = "Hello World",
number = 32,
date = DateTime.Now
};
//convert to JSON string
string json = JsonConvert.SerializeObject(dynamicObject);
Console.WriteLine(json);
BinaryFormatter
, что не рекомендуется
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.