summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorJose <pepone@users.noreply.github.com>2021-01-08 23:44:50 +0100
committerGitHub <noreply@github.com>2021-01-08 23:44:50 +0100
commit4419db6dc600b41141c23ede1c6895cbc898e819 (patch)
treefbb5b3769febe09a7caeb9e709480401515ba684 /cpp/src
parentFix Bogus name for metrics Request Id field - Close #906 (diff)
downloadice-4419db6dc600b41141c23ede1c6895cbc898e819.tar.bz2
ice-4419db6dc600b41141c23ede1c6895cbc898e819.tar.xz
ice-4419db6dc600b41141c23ede1c6895cbc898e819.zip
Fix C# marshal/unmarshal of optional data members (#1232)
See #889
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2cs/Gen.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp
index 8f0d9d888d6..cbe3518cb94 100644
--- a/cpp/src/slice2cs/Gen.cpp
+++ b/cpp/src/slice2cs/Gen.cpp
@@ -3004,8 +3004,17 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
_out << nl << "ostr_.startSlice(\"" << scoped << "\", -1, " << (!base ? "true" : "false") << ");";
for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
{
+ if(!(*q)->optional())
+ {
+ writeMarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns);
+ }
+ }
+
+ for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q)
+ {
writeMarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns);
}
+
_out << nl << "ostr_.endSlice();";
if(base)
{
@@ -3021,6 +3030,14 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
{
+ if(!(*q)->optional())
+ {
+ writeUnmarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns);
+ }
+ }
+
+ for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q)
+ {
writeUnmarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns);
}
_out << nl << "istr_.endSlice();";