Closed GoogleCodeExporter closed 9 years ago
[deleted comment]
The test case below works just fine. If you can show me a case where there is
an issue, please send it.
static class Outer
{
String name;
class Inner
{
String name;
};
Inner foo;
}
public void testNestedWithSameMemberName() throws Exception
{
Outer outer = new Outer();
outer.name = "Joe Outer";
// TestJsonReaderWriter.A.B b = a.new B();
TestJsonReaderWriter.Outer.Inner inner = outer.new Inner();
inner.name = "Jane Inner";
outer.foo = inner;
String json = getJsonString(outer);
println("json = " + json);
Outer x = (Outer) readJsonObject(json);
assertEquals(x.name, "Joe Outer");
assertEquals(x.foo.name, "Jane Inner");
}
Original comment by jdereg@gmail.com
on 29 Sep 2013 at 3:46
public class Parent {
private String name;
public String getParentName() {
return name;
}
public void setParentName(String name) {
this.name = name;
}
}
public class Child extends Parent {
private String name;
public String getChildName() {
return name;
}
public void setChildName(String name) {
this.name = name;
}
}
public class ChildTest {
@Test
public void test() throws IOException {
Child child = new Child();
child.setChildName("child");
child.setParentName("parent");
String json = JsonWriter.objectToJson(child);
Child roundTrip = (Child) JsonReader.jsonToJava(json);
System.out.println(json); //note missing Child name
assertEquals(child.getParentName(), roundTrip.getParentName());
assertEquals(child.getChildName(), roundTrip.getChildName());
}
}
Output:
{"@type":"Child","name":"parent"}
java.lang.AssertionError: expected:<child> but was:<null>
It is assumed that no 2 private fields will have the same name which is not a
safe assumption.
Original comment by taylor_t...@hotmail.com
on 30 Sep 2013 at 8:13
Looking into this now.
Original comment by jdereg@gmail.com
on 1 Oct 2013 at 5:37
This issue has been fixed and is available in the latest source code on GitHub.
The next release (either 2.2.32 or 2.3.0) will include this fix.
Original comment by jdereg@gmail.com
on 1 Oct 2013 at 8:04
I should add that the way this is addressed, is that the first field
encountered retains it's short name, in your example, the word 'name.' If
another field in the class hierarchy has the name, it's is written into the
JSON stream as 'fully.qualified.class.fieldName'. All copies then get written
out, and the reader, reads these in just fine. This is support for both
jsonToJava, and jsonToMaps, both read in, and written out.
Original comment by jdereg@gmail.com
on 1 Oct 2013 at 10:36
This issue was officially corrected in the 2.2.32 json-io release.
Original comment by jdereg@gmail.com
on 13 Nov 2013 at 1:20
Original issue reported on code.google.com by
taylor_t...@hotmail.com
on 6 Feb 2013 at 3:03