namespace Sample { using Apache.Thrift.Protocol; public class UserStruct : TStruct { public string UserName { get; set; } public int Age { get; set; } public override void Read(TProtocol protocol) { protocol.IncrementRecursionDepth(); try { TField field; while (true) { field = protocol.ReadFieldBegin(); if (field.Type == TType.Stop) { break; } switch (field.ID) { case 1: if (field.Type == TType.String) { this.UserName = protocol.ReadString(); } else { TProtocolUtil.Skip(protocol, field.Type); } break; case 2: if (field.Type == TType.I32) { this.Age = protocol.ReadI32(); } else { TProtocolUtil.Skip(protocol, field.Type); } break; default: TProtocolUtil.Skip(protocol, field.Type); break; } protocol.ReadFieldEnd(); } return; } finally { protocol.DecrementRecursionDepth(); } } public override void Write(TProtocol protocol) { protocol.WriteStructBegin(new TStruct("UserStruct")); protocol.WriteFieldBegin(new TField("UserName", TType.String, 1)); protocol.WriteString(this.UserName); protocol.WriteFieldEnd(); protocol.WriteFieldBegin(new TField("Age", TType.I32, 2)); protocol.WriteI32(this.Age); protocol.WriteFieldEnd(); protocol.WriteFieldStop(); protocol.WriteStructEnd(); } } }
namespace Sample { using Apache.Thrift.Protocol; public class MyClass : TBase { private bool _isSetFlag; public bool SomeBool { get; set; } public int SomeInt { get; set; } public override void Read(TProtocol protocol) { protocol.IncrementRecursionDepth(); try { TField field; while (true) { field = protocol.ReadFieldBegin(); if (field.Type == TType.Stop) { break; } switch (field.ID) { case 1: if (field.Type == TType.Bool) { this.SomeBool = protocol.ReadBool(); this._isSetFlag = true; } else { TProtocolUtil.Skip(protocol, field.Type); } break; case 2: if (field.Type == TType.I32) { this.SomeInt = protocol.ReadI32(); } else { TProtocolUtil.Skip(protocol, field.Type); } break; default: TProtocolUtil.Skip(protocol, field.Type); break; } protocol.ReadFieldEnd(); } return; } finally { protocol.DecrementRecursionDepth(); } } public override void Write(TProtocol protocol) { if (!this._isSetFlag) { throw new TProtocolException(TProtocolException.INVALID_DATA, "Cannot write a TBase with no fields set"); } protocol.WriteStructBegin(new TStruct("MyClass")); if (this.SomeBool) { protocol.WriteFieldBegin(new TField("someBool", TType.Bool, 1)); protocol.WriteBool(this.SomeBool); protocol.WriteFieldEnd(); } if (this.SomeInt != default(int)) { protocol.WriteFieldBegin(new TField("someInt", TType.I32, 2)); protocol.WriteI32(this.SomeInt); protocol.WriteFieldEnd(); } protocol.WriteFieldStop(); protocol.WriteStructEnd(); } } }In this example, we are defining a MyClass object that inherits from the Thrift.Protocol.TBase class. We have defined two properties for a boolean and an integer, and overridden the Read and Write methods to support serialization and deserialization.