本文整理汇总了C#中Google.Protobuf.CodedOutputStream.WriteString方法的典型用法代码示例。如果您正苦于以下问题:C# CodedOutputStream.WriteString方法的具体用法?C# CodedOutputStream.WriteString怎么用?C# CodedOutputStream.WriteString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Google.Protobuf.CodedOutputStream
的用法示例。
在下文中一共展示了CodedOutputStream.WriteString方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EncodeObject
static ByteString EncodeObject (object value, MemoryStream buffer, CodedOutputStream stream)
{
buffer.SetLength (0);
if (value == null) {
stream.WriteUInt64 (0);
} else if (value is Enum) {
stream.WriteInt32 ((int)value);
} else {
Type type = value.GetType ();
switch (Type.GetTypeCode (type)) {
case TypeCode.Int32:
stream.WriteInt32 ((int)value);
break;
case TypeCode.Int64:
stream.WriteInt64 ((long)value);
break;
case TypeCode.UInt32:
stream.WriteUInt32 ((uint)value);
break;
case TypeCode.UInt64:
stream.WriteUInt64 ((ulong)value);
break;
case TypeCode.Single:
stream.WriteFloat ((float)value);
break;
case TypeCode.Double:
stream.WriteDouble ((double)value);
break;
case TypeCode.Boolean:
stream.WriteBool ((bool)value);
break;
case TypeCode.String:
stream.WriteString ((string)value);
break;
default:
if (type == typeof(byte[]))
stream.WriteBytes (ByteString.CopyFrom ((byte[])value));
else if (TypeUtils.IsAClassType (type))
stream.WriteUInt64 (ObjectStore.Instance.AddInstance (value));
else if (TypeUtils.IsAMessageType (type))
WriteMessage (value, stream);
else if (TypeUtils.IsAListCollectionType (type))
WriteList (value, stream);
else if (TypeUtils.IsADictionaryCollectionType (type))
WriteDictionary (value, stream);
else if (TypeUtils.IsASetCollectionType (type))
WriteSet (value, stream);
else if (TypeUtils.IsATupleCollectionType (type))
WriteTuple (value, stream);
else
throw new ArgumentException (type + " is not a serializable type");
break;
}
}
stream.Flush ();
return ByteString.CopyFrom (buffer.GetBuffer (), 0, (int)buffer.Length);
}
示例2: IgnoreUnknownFields_RealDataStillRead
public void IgnoreUnknownFields_RealDataStillRead()
{
var message = SampleMessages.CreateFullTestAllTypes();
var stream = new MemoryStream();
var output = new CodedOutputStream(stream);
var unusedFieldNumber = 23456;
Assert.IsFalse(TestAllTypes.Descriptor.Fields.InDeclarationOrder().Select(x => x.FieldNumber).Contains(unusedFieldNumber));
output.WriteTag(unusedFieldNumber, WireFormat.WireType.LengthDelimited);
output.WriteString("ignore me");
message.WriteTo(output);
output.Flush();
stream.Position = 0;
var parsed = TestAllTypes.Parser.ParseFrom(stream);
Assert.AreEqual(message, parsed);
}
示例3: MapNonContiguousEntries
public void MapNonContiguousEntries()
{
var memoryStream = new MemoryStream();
var output = new CodedOutputStream(memoryStream);
// Message structure:
// Entry for MapInt32Int32
// Entry for MapStringString
// Entry for MapInt32Int32
// First entry
var key1 = 10;
var value1 = 20;
output.WriteTag(TestMap.MapInt32Int32FieldNumber, WireFormat.WireType.LengthDelimited);
output.WriteLength(4);
output.WriteTag(1, WireFormat.WireType.Varint);
output.WriteInt32(key1);
output.WriteTag(2, WireFormat.WireType.Varint);
output.WriteInt32(value1);
// Second entry
var key2 = "a";
var value2 = "b";
output.WriteTag(TestMap.MapStringStringFieldNumber, WireFormat.WireType.LengthDelimited);
output.WriteLength(6); // 3 bytes per entry: tag, size, character
output.WriteTag(1, WireFormat.WireType.LengthDelimited);
output.WriteString(key2);
output.WriteTag(2, WireFormat.WireType.LengthDelimited);
output.WriteString(value2);
// Third entry
var key3 = 15;
var value3 = 25;
output.WriteTag(TestMap.MapInt32Int32FieldNumber, WireFormat.WireType.LengthDelimited);
output.WriteLength(4);
output.WriteTag(1, WireFormat.WireType.Varint);
output.WriteInt32(key3);
output.WriteTag(2, WireFormat.WireType.Varint);
output.WriteInt32(value3);
output.Flush();
var parsed = TestMap.Parser.ParseFrom(memoryStream.ToArray());
var expected = new TestMap
{
MapInt32Int32 = { { key1, value1 }, { key3, value3 } },
MapStringString = { { key2, value2 } }
};
Assert.AreEqual(expected, parsed);
}
示例4: SkipGroup_WrongEndGroupTag
public void SkipGroup_WrongEndGroupTag()
{
// Create an output stream with:
// Field 1: string "field 1"
// Start group 2
// Field 3: fixed int32
// End group 4 (should give an error)
var stream = new MemoryStream();
var output = new CodedOutputStream(stream);
output.WriteTag(1, WireFormat.WireType.LengthDelimited);
output.WriteString("field 1");
// The outer group...
output.WriteTag(2, WireFormat.WireType.StartGroup);
output.WriteTag(3, WireFormat.WireType.Fixed32);
output.WriteFixed32(100);
output.WriteTag(4, WireFormat.WireType.EndGroup);
output.Flush();
stream.Position = 0;
// Now act like a generated client
var input = new CodedInputStream(stream);
Assert.AreEqual(WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited), input.ReadTag());
Assert.AreEqual("field 1", input.ReadString());
Assert.AreEqual(WireFormat.MakeTag(2, WireFormat.WireType.StartGroup), input.ReadTag());
Assert.Throws<InvalidProtocolBufferException>(input.SkipLastField);
}
示例5: SkipGroup
public void SkipGroup()
{
// Create an output stream with a group in:
// Field 1: string "field 1"
// Field 2: group containing:
// Field 1: fixed int32 value 100
// Field 2: string "ignore me"
// Field 3: nested group containing
// Field 1: fixed int64 value 1000
// Field 3: string "field 3"
var stream = new MemoryStream();
var output = new CodedOutputStream(stream);
output.WriteTag(1, WireFormat.WireType.LengthDelimited);
output.WriteString("field 1");
// The outer group...
output.WriteTag(2, WireFormat.WireType.StartGroup);
output.WriteTag(1, WireFormat.WireType.Fixed32);
output.WriteFixed32(100);
output.WriteTag(2, WireFormat.WireType.LengthDelimited);
output.WriteString("ignore me");
// The nested group...
output.WriteTag(3, WireFormat.WireType.StartGroup);
output.WriteTag(1, WireFormat.WireType.Fixed64);
output.WriteFixed64(1000);
// Note: Not sure the field number is relevant for end group...
output.WriteTag(3, WireFormat.WireType.EndGroup);
// End the outer group
output.WriteTag(2, WireFormat.WireType.EndGroup);
output.WriteTag(3, WireFormat.WireType.LengthDelimited);
output.WriteString("field 3");
output.Flush();
stream.Position = 0;
// Now act like a generated client
var input = new CodedInputStream(stream);
Assert.AreEqual(WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited), input.ReadTag());
Assert.AreEqual("field 1", input.ReadString());
Assert.AreEqual(WireFormat.MakeTag(2, WireFormat.WireType.StartGroup), input.ReadTag());
input.SkipLastField(); // Should consume the whole group, including the nested one.
Assert.AreEqual(WireFormat.MakeTag(3, WireFormat.WireType.LengthDelimited), input.ReadTag());
Assert.AreEqual("field 3", input.ReadString());
}
示例6: EncodeObject
static ByteString EncodeObject (object value, Type type, MemoryStream buffer, CodedOutputStream stream)
{
buffer.SetLength (0);
if (value != null && !type.IsInstanceOfType (value))
throw new ArgumentException ("Value of type " + value.GetType () + " cannot be encoded to type " + type);
if (value == null && !type.IsSubclassOf (typeof(RemoteObject)) && !IsACollectionType (type))
throw new ArgumentException ("null cannot be encoded to type " + type);
if (value == null)
stream.WriteUInt64 (0);
else if (value is Enum)
stream.WriteInt32 ((int)value);
else {
switch (Type.GetTypeCode (type)) {
case TypeCode.Int32:
stream.WriteInt32 ((int)value);
break;
case TypeCode.Int64:
stream.WriteInt64 ((long)value);
break;
case TypeCode.UInt32:
stream.WriteUInt32 ((uint)value);
break;
case TypeCode.UInt64:
stream.WriteUInt64 ((ulong)value);
break;
case TypeCode.Single:
stream.WriteFloat ((float)value);
break;
case TypeCode.Double:
stream.WriteDouble ((double)value);
break;
case TypeCode.Boolean:
stream.WriteBool ((bool)value);
break;
case TypeCode.String:
stream.WriteString ((string)value);
break;
default:
if (type.Equals (typeof(byte[])))
stream.WriteBytes (ByteString.CopyFrom ((byte[])value));
else if (IsAClassType (type))
stream.WriteUInt64 (((RemoteObject)value).id);
else if (IsAMessageType (type))
((IMessage)value).WriteTo (buffer);
else if (IsAListType (type))
WriteList (value, type, buffer);
else if (IsADictionaryType (type))
WriteDictionary (value, type, buffer);
else if (IsASetType (type))
WriteSet (value, type, buffer);
else if (IsATupleType (type))
WriteTuple (value, type, buffer);
else
throw new ArgumentException (type + " is not a serializable type");
break;
}
}
stream.Flush ();
return ByteString.CopyFrom (buffer.GetBuffer (), 0, (int)buffer.Length);
}
示例7: Encode
/// <summary>
/// Encode a value of the given type.
/// Should not be called directly. This interface is used by service client stubs.
/// </summary>
public static ByteString Encode(object value, Type type)
{
var stream = new MemoryStream ();
var encoder = new CodedOutputStream (stream);
if (value != null && !type.IsAssignableFrom (value.GetType ())) //TODO: nulls?
throw new ArgumentException ("Value of type " + value.GetType () + " cannot be encoded to type " + type);
if (type == typeof(Double))
encoder.WriteDouble ((Double)value);
else if (type == typeof(Single))
encoder.WriteFloat ((Single)value);
else if (type == typeof(Int32))
encoder.WriteInt32 ((Int32)value);
else if (type == typeof(Int64))
encoder.WriteInt64 ((Int64)value);
else if (type == typeof(UInt32))
encoder.WriteUInt32 ((UInt32)value);
else if (type == typeof(UInt64))
encoder.WriteUInt64 ((UInt64)value);
else if (type == typeof(Boolean))
encoder.WriteBool ((Boolean)value);
else if (type == typeof(String))
encoder.WriteString ((String)value);
else if (type == typeof(byte[]))
encoder.WriteBytes (ByteString.CopyFrom ((byte[])value));
else if (value != null && value is Enum)
encoder.WriteInt32 ((int)value);
else if (type.IsSubclassOf (typeof(RemoteObject))) {
if (value == null)
encoder.WriteUInt64 (0);
else
encoder.WriteUInt64 (((RemoteObject)value)._ID);
} else if (value != null && value is IMessage) {
((IMessage)value).WriteTo (stream);
return ByteString.CopyFrom (stream.ToArray ());
} else if (value != null && value is IList)
return EncodeList (value, type);
else if (value != null && value is IDictionary)
return EncodeDictionary (value, type);
else if (value != null && value.GetType ().IsGenericType && value.GetType ().GetGenericTypeDefinition () == typeof(HashSet<>))
return EncodeSet (value, type); //TODO: ugly checking for set types
else if (value != null && value.GetType ().IsGenericType &&
(value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<>) ||
value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<,>) ||
value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<,,>) ||
value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<,,,>) ||
value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<,,,,>) ||
value.GetType ().GetGenericTypeDefinition () == typeof(Tuple<,,,,,>)))
return EncodeTuple (value, type); //TODO: ugly checking for tuple types
else
throw new ArgumentException (type + " is not a serializable type");
encoder.Flush ();
return ByteString.CopyFrom (stream.ToArray ());
}
示例8: StringToByteBuffer
private byte[] StringToByteBuffer(string str)
{
int t = CodedOutputStream.ComputeTagSize(9);
int s = CodedOutputStream.ComputeStringSize(str);
s += t;
byte[] bytes = new byte[s];
CodedOutputStream cos = new CodedOutputStream(bytes);
cos.WriteTag((9 << 3) + 2);
cos.WriteString(str);
cos.Flush();
return bytes;
}
示例9: WriteValue
/// <summary>
/// Convert a Protocol Buffer value type from a C# value to a byte string.
/// </summary>
public static ByteString WriteValue(object value, Type type)
{
var stream = new MemoryStream ();
var encoder = new CodedOutputStream (stream);
if (type == typeof(double))
encoder.WriteDouble ((double)value);
else if (type == typeof(float))
encoder.WriteFloat ((float)value);
else if (type == typeof(int))
encoder.WriteInt32 ((int)value);
else if (type == typeof(long))
encoder.WriteInt64 ((long)value);
else if (type == typeof(uint))
encoder.WriteUInt32 ((uint)value);
else if (type == typeof(ulong))
encoder.WriteUInt64 ((ulong)value);
else if (type == typeof(bool))
encoder.WriteBool ((bool)value);
else if (type == typeof(string))
encoder.WriteString ((string)value);
else if (type == typeof(byte[]))
encoder.WriteBytes (ByteString.CopyFrom ((byte[])value));
else
throw new ArgumentException (type + " is not a Protocol Buffer value type");
encoder.Flush ();
return ByteString.CopyFrom (stream.ToArray ());
}