Я работаю с Kinect для Windows версии 2 и встречаюсь с проблемой. Я пытаюсь сериализовать объект Body и отправлять его через Интернет. Однако объект тела не является стерилизованным. Хотя я могу извлечь некоторую ключевую информацию из объекта Body и создать свой собственный объект, я могу потерять некоторую информацию. Мой вопрос заключается в том, как клонировать всю информацию из объекта Body в свой собственный сериализуемый объект? Спасибо.Как клонировать неэриализуемый объект? (C#)
ответ
Если клонирование - это то, что вы касаетесь, используйте AutoMapper
.
Сначала вам необходимо установить AutoMapper
с помощью NuGet ...
PM> Install-Package AutoMapper
Затем проверить этот пример и адаптировать его к своим потребностям ...
void Main()
{
AutoMapper.Mapper.CreateMap<User, MyUser>()
.ForMember(myUsers => myUsers.Name, users => users.MapFrom(property => string.Format("{0} {1}",property.FirstName, property.LastName)));
User user = new User
{
FirstName = "James",
LastName = "Doe",
DateOfBirth = DateTime.UtcNow
};
MyUser myUser = AutoMapper.Mapper.Map<MyUser>(user);
}
public class MyUser
{
public string Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class User
{
public User()
{
this.Id = Guid.NewGuid().ToString();
}
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
В приведенном выше примере , AutoMapper
показывает, что он может отображать свойство Id
класса MyUser
и User
, потому что они называются одинаково, однако нам нужно было создать пользовательскую карту для отображения User.FirstName
и User.LastName
до MyUser.Name
Недвижимость.
Спасибо Aydin , Думаю, я попробую это. Он должен соответствовать моим требованиям. – Ben
Все в порядке. Просто выполните следующую логику:
- Используйте отражение, чтобы перебрать свойства объекта, который вы хотите клонировать.
- Вы можете настроить данные с помощью предопределенного настраиваемого класса. (Возможно, вы захотите создать схему XML в соответствии с свойствами объекта, и оттуда вы создадите свой собственный предопределенный пользовательский класс).
Надеюсь, что эта концепция помогает. Если нет, давайте обсудим дальше.
Если цель сериализации состоит в том, чтобы восстановить ее на другом конце, первое, что вам необходимо определить, существует ли для вас конструктор и сеттеры для создания эквивалента с другой стороны. Если это чисто независимое представление, с которым должна взаимодействовать ваша серверная сторона, у вас гораздо более простая задача.
Моя рекомендация состояла бы в том, чтобы осмотреть объект тела как через открытый интерфейс, доступный через документацию, так и через отражение в отладчике, чтобы определить, какие данные вы можете извлечь и создать и построить пользовательский, сериализуемый класс на основе этой иерархической модели.
Если все данные, которые необходимо извлечь, являются общедоступными, просто создайте класс строителя, который принимает объект body в качестве его ввода и создает ваш собственный класс в качестве вывода. Если это не общедоступно, вам может понадобиться использовать рефлексию, чтобы исследовать нужные вам фрагменты. Я бы посоветовал, чтобы код отражения был создан вручную, чтобы избежать циклов в графе объектов, которые могут существовать в частном классе.
Вы пробовали сериализовать его в JSON? используя 'Newtonsoft.Json' –
Я не думаю, что он может быть сериализован в любую форму. – Ben
Является ли это свойством, которое вы пытаетесь сериализовать, если это метод, тогда вы правы, вам нужно будет выполнить метод, чтобы получить результат, но свойства могут быть сериализованы, я могу отправить пример при необходимости –