throw "compiler error: cannot serialize void field in a struct: " + name;
break;
case t_base_type::TYPE_STRING:
- out << "ReadString();";
+ if (((t_base_type*)type)->is_binary()) {
+ out << "ReadBinary();";
+ } else {
+ out << "ReadString();";
+ }
break;
case t_base_type::TYPE_BOOL:
out << "ReadBool();";
throw "compiler error: cannot serialize void field in a struct: " + name;
break;
case t_base_type::TYPE_STRING:
- out << "WriteString(" << name << ");";
+ if (((t_base_type*)type)->is_binary()) {
+ out << "WriteBinary(";
+ } else {
+ out << "WriteString(";
+ }
+ out << name << ");";
break;
case t_base_type::TYPE_BOOL:
out << "WriteBool(" << name << ");";
return ttype->get_name();
}
-string t_csharp_generator::base_type_name(t_base_type::t_base tbase, bool in_container) {
- switch (tbase) {
+string t_csharp_generator::base_type_name(t_base_type* tbase, bool in_container) {
+ switch (tbase->get_base()) {
case t_base_type::TYPE_VOID:
return "void";
case t_base_type::TYPE_STRING:
- return "string";
+ if (tbase->is_binary()) {
+ return "byte[]";
+ } else {
+ return "string";
+ }
case t_base_type::TYPE_BOOL:
return "bool";
case t_base_type::TYPE_BYTE:
case t_base_type::TYPE_DOUBLE:
return "double";
default:
- throw "compiler error: no C# name for base type " + tbase;
+ throw "compiler error: no C# name for base type " + tbase->get_base();
}
}
std::string csharp_thrift_usings();
std::string type_name(t_type* ttype, bool in_countainer=false, bool in_init=false);
- std::string base_type_name(t_base_type::t_base tbase, bool in_container=false);
+ std::string base_type_name(t_base_type* tbase, bool in_container=false);
std::string declare_field(t_field* tfield, bool init=false);
std::string function_signature(t_function* tfunction, std::string prefix="");
std::string argument_list(t_struct* tstruct);
WriteI64(BitConverter.DoubleToInt64Bits(d));
}
- public override void WriteString(string s)
+ public override void WriteBinary(byte[] b)
{
- byte[] b = Encoding.UTF8.GetBytes(s);
WriteI32(b.Length);
trans.Write(b, 0, b.Length);
}
}
}
- public override string ReadString()
+ public override byte[] ReadBinary()
{
int size = ReadI32();
- return ReadStringBody(size);
+ CheckReadLength(size);
+ byte[] buf = new byte[size];
+ trans.ReadAll(buf, 0, size);
+ return buf;
}
-
- public string ReadStringBody(int size)
+ private string ReadStringBody(int size)
{
CheckReadLength(size);
byte[] buf = new byte[size];
public abstract void WriteI32(int i32);
public abstract void WriteI64(long i64);
public abstract void WriteDouble(double d);
- public abstract void WriteString(string s);
+ public void WriteString(string s) {
+ WriteBinary(Encoding.UTF8.GetBytes(s));
+ }
+ public abstract void WriteBinary(byte[] b);
public abstract TMessage ReadMessageBegin();
public abstract void ReadMessageEnd();
public abstract int ReadI32();
public abstract long ReadI64();
public abstract double ReadDouble();
- public abstract string ReadString();
+ public string ReadString() {
+ return Encoding.UTF8.GetString(ReadBinary());
+ }
+ public abstract byte[] ReadBinary();
}
}
prot.ReadDouble();
break;
case TType.String:
- prot.ReadString();
+ // Don't try to decode the string, just skip it.
+ prot.ReadBinary();
break;
case TType.Struct:
prot.ReadStructBegin();