gpt4 book ai didi

java - 简单的框架。不要将一些变量序列化为xml

转载 作者:行者123 更新时间:2023-11-30 09:16:18 26 4
gpt4 key购买 nike

我在将 java 对象序列化为 XML 时遇到问题。我的类(class)如下所示:

@Root(strict = false, name = "Detail")
public class ProductList {
@ElementList(inline = true, entry = "Product")
private List<Product> products;
}

@Root(strict = false)
public class Product {
@Element(name = "ProductCode")
private String productCode;
@Element(name = "ProductPrice")
private double productPrice;
@Element(name = "Currency")
private String currency;
@Element(name = "ConversionRate")
private int conversionRate;
@Element(name = "ProductPoints", required = false)
private int productPoints;
@Element(name = "ProductCount", required = false)
private int productCount;
@Element(name = "ProductName", required = false)
private String productName;
@Element(name = "MinPrice", required = false)
private double minPricet;
@Element(name = "MaxPrice", required = false)
private double maxPricet;
@Element(name = "CanChangePrice", required = false)
private String canChangePrice;
}

下面的 XML 是从服务器发送的,反序列化没有任何问题:

<?xml version="1.0" encoding="UTF-8"?>
<Detail>
<Product>
<ProductCode>0001</ProductCode>
<ProductPrice>0.90</ProductPrice>
<Currency>GEL</Currency>
<ConversionRate>200</ConversionRate>
<ProductName>Bread</ProductName>
<MinPrice>0.9</MinPrice>
<MaxPrice>0.9</MaxPrice>
<CanChangePrice>N</CanChangePrice>
</Product>
<Product>
...
</Product>
</Detail>

我尝试生成具有以下结构的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<Detail>
<Product>
<ProductCode>0001</ProductCode>
<ProductPrice>0.90</ProductPrice>
<Currency>GEL</Currency>
<ConversionRate>200</ConversionRate>
<ProductPoints>180</ProductPoints>
<ProductCount>1</ProductCount>
</Product>
<Product>
...
</Product>
</Detail>

但是我明白了:

<Detail>
<Product>
<ProductCode>0001</ProductCode>
<ProductPrice>0.9</ProductPrice>
<Currency>GEL</Currency>
<ConversionRate>200</ConversionRate>
<productPoints>180</productPoints>
<ProductCount>1</ProductCount>
<ProductName>Bread</ProductName>
<MinPrice>0.9</MinPrice>
<MaxPrice>0.9</MaxPrice>
<CanChangePrice>N</CanChangePrice>
</Product>
<Product>
...
</Product>
</Detail>

标签 <ProductName> , <MinPrice> , <MaxPrice> , <CanChangePrice>不得包含在序列化的 XML 中。

有什么方法可以告诉框架在序列化时不要包含特定的标签\变量?

最佳答案

问题

您的类成员初始化为null,因此required=false 没有not 的效果序列化它们。

intorg.simpleframework.xml.transform.IntegerTransform 序列化.这个类的write(Integer)方法很简单:

public String write(Integer value) {
return value.toString();
}

如您所见,使用了简单的自动装箱。

  1. 你的原始 int 被构造函数初始化为 0
  2. 它被装入Integer
  3. IntegerString 值为"0" null.

解决方案

为您的类(class)成员使用Integer,而不是int

编辑

如果您不想序列化某个成员,请不要使用@Element 对其进行注释。简单不是关于“生成”XML,而是关于将实例映射到 XML 或从 XML 映射实例。您要映射的每个成员都需要一个注释。每个带有注释的成员都将被映射。

关于java - 简单的框架。不要将一些变量序列化为xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com