Java Xstream-字符串数组
首先,我不是在要求一个解决方案,而是一种思考的方式 我有一些数据需要序列化以便稍后签出。。。我知道怎么做。。但是字段名是问题所在 数据结构包括:Java Xstream-字符串数组,java,xml-serialization,alias,xstream,Java,Xml Serialization,Alias,Xstream,首先,我不是在要求一个解决方案,而是一种思考的方式 我有一些数据需要序列化以便稍后签出。。。我知道怎么做。。但是字段名是问题所在 数据结构包括: Name of the Field CoordX CoordY Value (有20个不同的字段。我需要检查biiigggg字符串日志…) 我可以使用单个字符串[]或多个字符串[]。。。正如我所说。。问题是它在XML上的显示方式 如果我使用单个arraylist多维->[]我得到了这个 <teste> <string-a
Name of the Field
CoordX
CoordY
Value
(有20个不同的字段。我需要检查biiigggg字符串日志…)
我可以使用单个字符串[]或多个字符串[]。。。正如我所说。。问题是它在XML上的显示方式
如果我使用单个arraylist多维->[]我得到了这个
<teste>
<string-array>
<string>fieldName</string>
<string>x</string>
<string>y</string>
<string>value</string>
</string-array>
<string-array>
<string>fieldName</string>
<string>x</string>
<string>y</string>
<string>value</string>
</string-array>
</teste>
字段名
x
Y
价值
字段名
x
Y
价值
如果我使用单个字符串[],我可以将字符串的名称作为字段名
<Fieldname>
<string>X</string>
<string>y</string>
<string>Value</string>
</Fieldname>
X
Y
价值
我看到普通别名适用于所有字段(@XStreamImplicit(itemFieldName=“part”)),但这并不能解决我的问题
如果在反序列化的另一端,按行检查日志,不按字段检查日志(我知道第1行是字段名,第2行是x..etc
所以。。你们觉得怎么样 我通常根据“字段”的内容设计序列化。假设您的名称和值字段相对较小,您可以将它们序列化为
<list>
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
</list>
您可以这样定义容器和字段:
@XStreamAlias("mylistofitems")
public class Container {
public List<Field> fields;
public void addField(String name, int x, int y, String desc) {
if (fields == null) fields = new ArrayList<Field>();
fields.add(new Field(name, x,y, desc));
}
}
@XStreamAlias("field")
public class Field {
public Field() {}
public Field(String name, int x, int y, String desc) {
this.name = name;
cordX = x;
cordY = y;
value = desc;
}
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private int cordX;
@XStreamAsAttribute
private int cordY;
@XStreamAsAttribute
private String value;
}
@XStreamAlias(“mylistofitems”)
公营货柜{
公共列表字段;
public void addField(字符串名称、整数x、整数y、字符串描述){
如果(fields==null)fields=newarraylist();
添加(新字段(名称,x,y,描述));
}
}
@XStreamAlias(“字段”)
公共类字段{
公共字段(){}
公共字段(字符串名称、整数x、整数y、字符串描述){
this.name=名称;
cordX=x;
cordY=y;
值=desc;
}
@XStreamAsAttribute
私有字符串名称;
@XStreamAsAttribute
私人int cordX;
@XStreamAsAttribute
科迪私人酒店;
@XStreamAsAttribute
私有字符串值;
}
程序将给出以下输出:
<mylistofitems>
<fields>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</fields>
</mylistofitems>
<mylist>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</mylist>
希望这有帮助。我通常根据“字段”的内容设计序列化。假设您的名称和值字段相对较小,您可以将它们序列化为
<list>
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
</list>
您可以这样定义容器和字段:
@XStreamAlias("mylistofitems")
public class Container {
public List<Field> fields;
public void addField(String name, int x, int y, String desc) {
if (fields == null) fields = new ArrayList<Field>();
fields.add(new Field(name, x,y, desc));
}
}
@XStreamAlias("field")
public class Field {
public Field() {}
public Field(String name, int x, int y, String desc) {
this.name = name;
cordX = x;
cordY = y;
value = desc;
}
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private int cordX;
@XStreamAsAttribute
private int cordY;
@XStreamAsAttribute
private String value;
}
@XStreamAlias(“mylistofitems”)
公营货柜{
公共列表字段;
public void addField(字符串名称、整数x、整数y、字符串描述){
如果(fields==null)fields=newarraylist();
添加(新字段(名称,x,y,描述));
}
}
@XStreamAlias(“字段”)
公共类字段{
公共字段(){}
公共字段(字符串名称、整数x、整数y、字符串描述){
this.name=名称;
cordX=x;
cordY=y;
值=desc;
}
@XStreamAsAttribute
私有字符串名称;
@XStreamAsAttribute
私人int cordX;
@XStreamAsAttribute
科迪私人酒店;
@XStreamAsAttribute
私有字符串值;
}
程序将给出以下输出:
<mylistofitems>
<fields>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</fields>
</mylistofitems>
<mylist>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</mylist>
希望这有帮助