AbstractTextWriter.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Xml;
  3. namespace Google.ProtocolBuffers.Serialization
  4. {
  5. /// <summary>
  6. /// Provides a base class for text writers
  7. /// </summary>
  8. public abstract class AbstractTextWriter : AbstractWriter
  9. {
  10. /// <summary>
  11. /// Encodes raw bytes to be written to the stream
  12. /// </summary>
  13. protected virtual string EncodeBytes(ByteString bytes)
  14. {
  15. return bytes.ToBase64();
  16. }
  17. /// <summary>
  18. /// Writes a typed field as a text value
  19. /// </summary>
  20. protected abstract void WriteAsText(string field, string textValue, object typedValue);
  21. /// <summary>
  22. /// Writes a String value
  23. /// </summary>
  24. protected override void Write(string field, string value)
  25. {
  26. WriteAsText(field, value, value);
  27. }
  28. /// <summary>
  29. /// Writes a Boolean value
  30. /// </summary>
  31. protected override void Write(string field, bool value)
  32. {
  33. WriteAsText(field, XmlConvert.ToString(value), value);
  34. }
  35. /// <summary>
  36. /// Writes a Int32 value
  37. /// </summary>
  38. protected override void Write(string field, int value)
  39. {
  40. WriteAsText(field, XmlConvert.ToString(value), value);
  41. }
  42. /// <summary>
  43. /// Writes a UInt32 value
  44. /// </summary>
  45. protected override void Write(string field, uint value)
  46. {
  47. WriteAsText(field, XmlConvert.ToString(value), value);
  48. }
  49. /// <summary>
  50. /// Writes a Int64 value
  51. /// </summary>
  52. protected override void Write(string field, long value)
  53. {
  54. WriteAsText(field, XmlConvert.ToString(value), value);
  55. }
  56. /// <summary>
  57. /// Writes a UInt64 value
  58. /// </summary>
  59. protected override void Write(string field, ulong value)
  60. {
  61. WriteAsText(field, XmlConvert.ToString(value), value);
  62. }
  63. /// <summary>
  64. /// Writes a Single value
  65. /// </summary>
  66. protected override void Write(string field, float value)
  67. {
  68. WriteAsText(field, XmlConvert.ToString(value), value);
  69. }
  70. /// <summary>
  71. /// Writes a Double value
  72. /// </summary>
  73. protected override void Write(string field, double value)
  74. {
  75. WriteAsText(field, XmlConvert.ToString(value), value);
  76. }
  77. /// <summary>
  78. /// Writes a set of bytes
  79. /// </summary>
  80. protected override void Write(string field, ByteString value)
  81. {
  82. WriteAsText(field, EncodeBytes(value), value);
  83. }
  84. /// <summary>
  85. /// Writes a System.Enum by the numeric and textual value
  86. /// </summary>
  87. protected override void WriteEnum(string field, int number, string name)
  88. {
  89. WriteAsText(field, name, number);
  90. }
  91. }
  92. }