通过将这些项目序列化为XMI格式来保存它们。然后,这样的文件可以被加载回模型中。为此,我使用了标准的EMF工具(如Resource)。
由于模型重构,以下内容发生了变化:
name
(带有大写字母)的eClassmyclass
。
如何将旧的XMI项目文件加载到我的新模型中?
在这个问题之前,我可以:
解决方案的约束条件是:
)也必须正确加载。Ed Merks在EMF论坛上解决了这个问题。
通过截取XML映射来支持向后兼容性的最干净的方法是在EMF资源上启用extendedmetadata
的实现。这个类是调整EMF资源及其内容的中心入口点。它避免了必须在EMF框架内专门化各种其他类。
但是,我的项目已经有一个专门的XMLHelper
类,它处理XML序列化/反序列化,所以Ed Merks帮助解决了这个类中的问题。
/**
* Helper class that allows intercepting the XML to model mapping, to support backwards compatibility.
* <p>
* 2 methods must be overridden to handle compatibility mappings:
* <dl>
* <dt>{@link XMLHelperImpl#getFeature(EClass, String, String, boolean)}</dt>
* <dd>Is called to map features of a certain EClass. These include attributes and child elements in the XML file.</dd>
* <dt>{@link XMLHelperImpl#getType(EFactory, String)}</dt>
* <dd>Is called to map types that are used in the model.</dd>
* </dl>
* <p>
* Their difference becomes clear by looking at the model file. Sometimes both need to be handled. For example:
* <ul>
* <li>a {@link Person} has zero or more {@link Person#getPhoneNumber()} configurations ('feature')</li>
* <li>these features are of type {@link PhoneNumber} or possibly a subclass! ('type')</li>
* </ul>
* <p>
* See https://www.eclipse.org/forums/index.php/m/1449615/
*/
public class CustomXmlHelper extends XMLHelperImpl implements XMLHelper {
public CustomXmlHelper() {
super();
deresolve = true;
}
public CustomXmlHelper(XMLResource resource) {
super(resource);
deresolve = true;
}
@Override
public EStructuralFeature getFeature(EClass eClass, String namespaceURI, String name, boolean isElement) {
String compatName = name;
if (eClass == ProjectModelPackage.Literals.MyClass) {
if (!isElement && "Name".equals(name)) {
// 1.x to 2.x compatibility (October 2014)
// 1.x = MyClass attribute 'Name'
// 2.x = MyBaseClass attribute 'name', shared by MyClass
compatName = ProjectModelPackage.Literals.EMY_BASE_CLASS__NAME.getName(); // 'n(!)ame'
}
}
// future feature mappings handled here
return super.getFeature(eClass, namespaceURI, compatName, isElement);
}
@Override
public EClassifier getType(EFactory eFactory, String name) {
String compatName = name;
if (eFactory == ProjectModelPackage.eINSTANCE) {
// placeholder for type compatibility
// if ("OldTypeName".equals(name)) {
// compatName = ProjectModelPackage.Literals.NEW_TYPE_NAME.getName();
// }
}
return super.getType(eFactory, compatName);
}
}
问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这
列表项目 我从xml文件中转换并剥离了所有名称空间,并转换为Json对象,下面是我在jobject中的文件。这是我获取返回的Env对象的方法,但它返回了null。 你能帮忙指出我的模型中缺少了什么吗?我一直在做不同的路线都没有成功:( 这是我的班级: 公共类 SearchRecords_V2 { 公共列表 public class search txrecord _ V2 {[data membe
我用的是Django 2。十、 我有一个用于验证请求的序列化程序。(不是ModelSerializer) 是对模型的引用。 我希望用户在字段中传递数据库id,但在验证后,got被转换为对象。 我试图重写方法,并将对象分配给字段,但它给出了错误
我在我的Android应用程序中使用了外部API。问题是在响应中,我不知道如何反序列化返回对象列表。我得到的JSON有这样的格式: 改装中的API调用如下所示: 我想忽略属性,并从该响应中检索。我知道我可以创建一个自定义的反序列化器,像这里这样忽略JSON中的一些字段,并像这里这样将成员转换为数组,但是在第二个链接中,我需要一个包装器类来形成我所期望的我的。有没有可能在我的列表/数组周围没有包装器
我在尝试“反序列化”对象时遇到以下错误: 我需要能够使用这个XStream库序列化/反序列化对象,甚至是那些没有参数构造函数的对象。
问题内容: 当谈到Dart中的JSON编码时,根据Seth Ladd的赞誉 ,现在最终批准的正式方式是+ 。 假设我们有一堆模型类(PODO),例如: 现在,我希望能够像这样对我的域对象进行JSON编码: 不幸的是,这行不通… …除非我们明确告知如何编码: 我真的必须在模型类的每个类中添加一个方法,还是有更好的方法? 编辑 :这是我正在寻找的简单序列化: 例如,在ServiceStack.Text