我正在使用Kinect for Windows版本2并遇到问题。我尝试序列化Body对象并通过Internet发送它。但是Body对象不可消毒。虽然我可以从Body对象中提取一些关键信息并创建自己的对象,但我可能会丢失一些信息。我的问题是如何将Body对象中的所有信息克隆到我自己的可序列化对象? 谢谢。
答案 0 :(得分:0)
没关系。只需执行以下逻辑:
希望这个概念有所帮助。如果没有,让我们进一步讨论。
答案 1 :(得分:0)
如果序列化的目的是在另一端重构它,那么首先需要确定构造函数和setter是否存在,以便在另一端创建等效函数。如果它纯粹是为了服务器端需要与之交互的独立表示,那么您的任务就更简单了。
我的建议是通过文档和调试器中的反射通过公共接口检查body对象,以确定您可以想要提取哪些数据,并根据该层次模型构建自定义的可序列化类。 / p>
如果您需要提取的所有数据都是公共可访问的,那么只需编写一个构建器类,它将body对象作为输入,并将您的自定义类构造为输出。如果它不可公开访问,您可能需要使用反射来探索所需的部分。我建议手动构建反射代码,以避免对象图中可能存在于私有类中的循环。
答案 2 :(得分:0)
如果您正在关注克隆,请使用public void write2(Iterable<?> objects) {
try (BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("out.txt"), "UTF-8"))) {
objects.forEach(wrap(o -> bw.write(o.toString())));
} catch (IOException|UncheckedIOException e) {
//handle exception
}
}
。
首先,您需要使用NuGet ...
安装AutoMapper
AutoMapper
然后查看这个例子并根据自己的需要进行调整......
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
属性。