2013-04-21 3 views
0

내 프로그램에서 XML로 개체를 저장해야합니다. 하지만 모든 속성을 xml로 serialize하지 않으려합니다. 어떻게해야합니까?직렬화 할 속성 선택

public class Car implements ICar{ 
//all variables has their own setters and getters 
private String manufacturer; 
private String plate; 
private DateTime dateOfManufacture; 
private int mileage; 
private int ownerId; 
private Owner owner; // will not be serialized to xml 
..... 
} 


//code for serialize to xml 
public static String serialize(Object obj) 
{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    XMLEncoder encoder = new XMLEncoder(baos); 
    encoder.writeObject(obj); 
    encoder.close();   
    return baos.toString(); 
} 

답변

1

주석이있는 JAXB 직렬화를 선택합니다. 가장 쉽고 쉬운 옵션이었습니다. 도움을 주신 모든 분들께 감사드립니다.

public static String serialize(Object obj) throws JAXBException 
{ 
    StringWriter writer = new StringWriter(); 
    JAXBContext context = JAXBContext.newInstance(obj.getClass()); 
    Marshaller m = context.createMarshaller(); 

    m.marshal(obj, writer); 
    return writer.toString(); 
} 

public static Object deserialize(String xml, Object obj) throws JAXBException 
{ 
    StringBuffer xmlStr = new StringBuffer(xml); 
    JAXBContext context = JAXBContext.newInstance(obj.getClass()); 
    Unmarshaller um = context.createUnmarshaller(); 

    return um.unmarshal(new StreamSource(new StringReader(xmlStr.toString()))); 
} 
1

체크 아웃 this link. 다음은 업데이트 된 예제입니다.

BeanInfo info = Introspector.getBeanInfo(Car.class); 
PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors(); 
for (int i = 0; i < propertyDescriptors.length; ++i) { 
    PropertyDescriptor pd = propertyDescriptors[i]; 
    if (pd.getName().equals("dateOfManufacture")) { 
     pd.setValue("transient", Boolean.TRUE); 
    } 
} 
+0

원래 포스터가 사용하고있는 것이기 때문에 XmlEncoder로 직렬화 할 수 있습니까? –

+0

XMLEncoder에서 작동하지 않습니다. 대신 무엇을 사용해야합니까? –

+1

@ zdarsky.peter : JavaBean 속성을 일시적으로 표시하는 방법에 대해서는 [이 기사] (http://www.oracle.com/technetwork/java/persistence4-140124.html#transient)를 참조하십시오. 그 중 하나 또는 JAXB를 사용하여 직렬화하고 속성을 일시적으로 표시하려면 @XmlTransient 주석을 사용하십시오. –