2015-04-25 1 views
0

Я работаю с Kinect для Windows версии 2 и встречаюсь с проблемой. Я пытаюсь сериализовать объект Body и отправлять его через Интернет. Однако объект тела не является стерилизованным. Хотя я могу извлечь некоторую ключевую информацию из объекта Body и создать свой собственный объект, я могу потерять некоторую информацию. Мой вопрос заключается в том, как клонировать всю информацию из объекта Body в свой собственный сериализуемый объект? Спасибо.Как клонировать неэриализуемый объект? (C#)

+0

Вы пробовали сериализовать его в JSON? используя 'Newtonsoft.Json' –

+0

Я не думаю, что он может быть сериализован в любую форму. – Ben

+0

Является ли это свойством, которое вы пытаетесь сериализовать, если это метод, тогда вы правы, вам нужно будет выполнить метод, чтобы получить результат, но свойства могут быть сериализованы, я могу отправить пример при необходимости –

ответ

0

Если клонирование - это то, что вы касаетесь, используйте 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 Недвижимость.

+0

Спасибо Aydin , Думаю, я попробую это. Он должен соответствовать моим требованиям. – Ben

0

Все в порядке. Просто выполните следующую логику:

  1. Используйте отражение, чтобы перебрать свойства объекта, который вы хотите клонировать.
  2. Вы можете настроить данные с помощью предопределенного настраиваемого класса. (Возможно, вы захотите создать схему XML в соответствии с свойствами объекта, и оттуда вы создадите свой собственный предопределенный пользовательский класс).

Надеюсь, что эта концепция помогает. Если нет, давайте обсудим дальше.

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^