Xstream返回一个字符串而不是对象(unmarshal)

时间:2016-09-18 14:54:49

标签: java unmarshalling xstream

XML:

<FooBar>
    <foo name="FooName">
        <bar .../>
        <bar .../>
    </foo>
</FooBar>

Java:

class FooBar {
    private Foo foo;
}

我想要的是一种不在Foo中存储FooBar对象的方法,而是在静态Map中添加Foo对象并仅在类{中存储属性名称(FooName) {1}}。

换句话说,我只想在需要时解析FooBar(未知名称)并将名称存储在foo中。

这样的事情:

FooBar.java

FooBar

FooConverter.java

class FooBar {
    @XStreamConverter(FooConverter.class)
    private String foo;
}

目的是只解析一次public class FooConverter extends ReflectionConverter { public FooConverter(Mapper mapper, ReflectionProvider reflectionProvider) { super(mapper, reflectionProvider); } @Override public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mc) { throw new UnsupportedOperationException("Not supported yet."); } @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) { String name = reader.getAttribute("name"); Foo foo = FOOMAP.get(name); if (foo != null) { return name; } foo = (Foo) super.unmarshal(reader, uc); FOOMAP.put(name, foo); return name; } @Override public boolean canConvert(Class type) { return type == Foo.class || type == String.class; } } 标记,如果我们已经知道它(相同的名称属性)并且能够用foo做一种包含,因为“FooName”已经知道

1 个答案:

答案 0 :(得分:0)

doUnmarshal有一个函数@Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) { String name = reader.getAttribute("name"); Foo foo = FOOMAP.get(name); if (foo != null) { return name; } foo = (Foo) super.doUnmarshal(new Foo(), reader, uc); if(foo.getSomething() != null) // check if foo is not empty FOOMAP.put(name, foo); return name; } @Override public boolean canConvert(Class type) { return type.equals(String.class); } ,第一个参数是一个Object。

+ (NSURL *)createRequestURLWithChannel:(NSString *)channelName {
    NSString *sName = [channelName stringByReplacingOccurrencesOfString:@"_" withString:@"-"];
    NSString *channelvideo = [NSString stringWithFormat:@"%@", sName];
    return [NSURL URLWithString:url];
}

它不好但是有效。

相关问题