Я просто записал рекурсивную функцию, чтобы выяснить, должен ли класс был быть сериализирован с помощью DataContractSerializer. Большая проблема шла с шаблонами/дженериками, где класс мог содержать другие типы, которые должны были быть datacontract, сериализированным..., таким образом, это, проходят каждый тип, если это не datacontractserializable проверка, это - типы.
напишите преобразователь, он должен быть чем-то похожим на фрагмент кода
class FieldDtoConvertor implements Converter {
@SuppressWarnings("unchecked")
public boolean canConvert(final Class clazz) {
return clazz.equals(FieldDto.class);
}
public void marshal(final Object value,
final HierarchicalStreamWriter writer,
final MarshallingContext context) {
final FieldDto fieldDto = (FieldDto) value;
writer.addAttribute(fieldDto.getAttributeName(), fieldDto.getAttributeValue());
}
}
И при использовании XStream зарегистрируйте преобразователь
final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());
Это намного проще в JAXB
@XmlRootElement
public class Node {
@XmlAttribute
String att;
@XmlValue
String value;
}