mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-05 04:58:57 +00:00
Fix [C#] Object API - Invalid Property Name used in UnPackTo for unio… (#7751)
* Fix [C#] Object API - Invalid Property Name used in UnPackTo for union fieldhttps://github.com/google/flatbuffers/issues/7750, also fixes invalid Code generated in WriteJson for Unions named Value. * Test added: new schema union_value_collision.fbs with a Union named Value and a union field named value. The generated C# code now compiles when NetTest.bat. The Code generated with an older flatc.exe didn't compile because of a mismatch of the property name (Value vs. Value_). * branch was not up-to-date with master * BASE_OPTS + CPP_OPTS removed and union_value_collision_generated.h deleted Co-authored-by: Derek Bailey <derekbailey@google.com>
This commit is contained in:
@@ -1525,7 +1525,7 @@ class CSharpGenerator : public BaseGenerator {
|
||||
" _o, "
|
||||
"Newtonsoft.Json.JsonSerializer serializer) {\n";
|
||||
code += " if (_o == null) return;\n";
|
||||
code += " serializer.Serialize(writer, _o.Value);\n";
|
||||
code += " serializer.Serialize(writer, _o." + class_member + ");\n";
|
||||
code += " }\n";
|
||||
code +=
|
||||
" public override object ReadJson(Newtonsoft.Json.JsonReader "
|
||||
@@ -1562,8 +1562,8 @@ class CSharpGenerator : public BaseGenerator {
|
||||
code += " default: break;\n";
|
||||
} else {
|
||||
auto type_name = GenTypeGet_ObjectAPI(ev.union_type, opts);
|
||||
code += " case " + Name(enum_def) + "." + Name(ev) +
|
||||
": _o.Value = serializer.Deserialize<" + type_name +
|
||||
code += " case " + Name(enum_def) + "." + Name(ev) + ": _o." +
|
||||
class_member + " = serializer.Deserialize<" + type_name +
|
||||
">(reader); break;\n";
|
||||
}
|
||||
}
|
||||
@@ -1586,7 +1586,7 @@ class CSharpGenerator : public BaseGenerator {
|
||||
auto &code = *code_ptr;
|
||||
std::string varialbe_name = "_o." + camel_name;
|
||||
std::string class_member = "Value";
|
||||
if (class_member == camel_name) class_member += "_";
|
||||
if (class_member == enum_def.name) class_member += "_";
|
||||
std::string type_suffix = "";
|
||||
std::string func_suffix = "()";
|
||||
std::string indent = " ";
|
||||
|
||||
Reference in New Issue
Block a user