Updated Branches: refs/heads/master b6dfc9036 -> 548244f04
THRIFT-1959: Add Union TMemoryBuffer support Client: csharp Patch: carl Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/548244f0 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/548244f0 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/548244f0 Branch: refs/heads/master Commit: 548244f0495898492616f520fec7b08c267574d9 Parents: b6dfc90 Author: Carl Yeksigian <[email protected]> Authored: Thu Jun 6 07:52:42 2013 -0400 Committer: Carl Yeksigian <[email protected]> Committed: Thu Jun 6 07:52:42 2013 -0400 ---------------------------------------------------------------------- lib/csharp/src/Transport/TMemoryBuffer.cs | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/548244f0/lib/csharp/src/Transport/TMemoryBuffer.cs ---------------------------------------------------------------------- diff --git a/lib/csharp/src/Transport/TMemoryBuffer.cs b/lib/csharp/src/Transport/TMemoryBuffer.cs index c6e72f1..ca31fee 100644 --- a/lib/csharp/src/Transport/TMemoryBuffer.cs +++ b/lib/csharp/src/Transport/TMemoryBuffer.cs @@ -17,6 +17,7 @@ * under the License. */ +using System; using System.IO; using System.Reflection; using Thrift.Protocol; @@ -59,7 +60,7 @@ namespace Thrift.Transport { get { return true; } } - public static byte[] Serialize(TBase s) { + public static byte[] Serialize(TAbstractBase s) { var t = new TMemoryBuffer(); var p = new TBinaryProtocol(t); @@ -68,12 +69,18 @@ namespace Thrift.Transport { return t.GetBuffer(); } - public static T DeSerialize<T>(byte[] buf) where T : TBase, new() { - var t = new T(); - var trans = new TMemoryBuffer(buf); - var p = new TBinaryProtocol(trans); - t.Read(p); - return t; + public static T DeSerialize<T>(byte[] buf) where T : TAbstractBase { + var trans = new TMemoryBuffer(buf); + var p = new TBinaryProtocol(trans); + if (typeof (TBase).IsAssignableFrom(typeof (T))) { + var method = typeof (T).GetMethod("Read", BindingFlags.Instance | BindingFlags.Public); + var t = Activator.CreateInstance<T>(); + method.Invoke(t, new object[] {p}); + return t; + } else { + var method = typeof (T).GetMethod("Read", BindingFlags.Static | BindingFlags.Public); + return (T) method.Invoke(null, new object[] {p}); + } } private bool _IsDisposed;
