[ https://issues.apache.org/jira/browse/THRIFT-1783?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13529603#comment-13529603 ]
Carl Yeksigian commented on THRIFT-1783: ---------------------------------------- v2 of patch, which reads properly. Also, added an additional constructor for the required fields; however, making the other constructor private breaks deserialization. > C# doesn't handle required fields correctly > ------------------------------------------- > > Key: THRIFT-1783 > URL: https://issues.apache.org/jira/browse/THRIFT-1783 > Project: Thrift > Issue Type: Bug > Components: C# - Compiler > Affects Versions: 0.9 > Reporter: Jens Geyer > Fix For: 1.0 > > Attachments: 1783.patch, 1783-v2.patch > > > The following IDL > {code} > struct MyStruct { > 1 : required i32 ID, > 2 : optional bool someFlag, > 3 : optional string Key > } > {code} > generates this code: > {code} > public void Write(TProtocol oprot) { > TStruct struc = new TStruct("MyStruct"); > oprot.WriteStructBegin(struc); > TField field = new TField(); > if (__isset.ID) { > field.Name = "ID"; > field.Type = TType.I32; > field.ID = 1; > oprot.WriteFieldBegin(field); > oprot.WriteI32(ID); > oprot.WriteFieldEnd(); > } > if (__isset.someFlag) { > field.Name = "someFlag"; > field.Type = TType.Bool; > field.ID = 2; > oprot.WriteFieldBegin(field); > oprot.WriteBool(SomeFlag); > oprot.WriteFieldEnd(); > } > if (Key != null && __isset.Key) { > field.Name = "Key"; > field.Type = TType.String; > field.ID = 3; > oprot.WriteFieldBegin(field); > oprot.WriteString(Key); > oprot.WriteFieldEnd(); > } > oprot.WriteFieldStop(); > oprot.WriteStructEnd(); > } > {code} > This is unexpected, since the ID field is required and thus there's no need > to maintain the _isset flag for it. > Expected behaviour would be that > * the field is always written to the output > * it is ensured that the field is successfully read from the input (see C++ > impl) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira