Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. public class MainClass : IMValueConvertible
  2. {
  3. private static readonly IMValueBaseAdapter _myAdapter = new MainClassAdapter();
  4. public int Id { get; set; }
  5. public string SomeString { get; set; }
  6. public List<VehicleDto> Vehicles { get; set; } = new List<VehicleDto>();
  7.  
  8. public MainClass(int id, string someString, List<VehicleDto> vehicles)
  9. {
  10. Id = id;
  11. SomeString = someString;
  12. Vehicles = vehicles;
  13. }
  14.  
  15. public MainClass() { }
  16.  
  17. public IMValueBaseAdapter GetAdapter() => _myAdapter;
  18. }
  19.  
  20. public class MainClassAdapter : IMValueAdapter<MainClass>
  21. {
  22. private readonly IMValueAdapter<List<VehicleDto>> _vehicleListAdapter;
  23. public MainClassAdapter()
  24. {
  25. _vehicleListAdapter = DefaultMValueAdapters.GetArrayAdapter(new VehicleDataAdapter());
  26. }
  27.  
  28. public MainClass FromMValue(IMValueReader reader)
  29. {
  30. reader.BeginObject();
  31. int id = 0;
  32. string someString = null;
  33. List<VehicleDto> vehicles = null;
  34. while (reader.HasNext())
  35. {
  36. switch (reader.NextName())
  37. {
  38. case "id":
  39. id = reader.NextInt();
  40. break;
  41. case "someString":
  42. someString = reader.NextString();
  43. break;
  44. case "vehicles":
  45. vehicles = _vehicleListAdapter.FromMValue(reader);
  46. break;
  47. default:
  48. reader.SkipValue();
  49. break;
  50. }
  51. }
  52.  
  53. reader.EndObject();
  54. return new MainClass(id, someString, vehicles);
  55. }
  56.  
  57. public void ToMValue(MainClass value, IMValueWriter writer)
  58. {
  59. writer.BeginObject();
  60. writer.Name("id");
  61. writer.Value(value.Id);
  62. writer.Name("someString");
  63. writer.Value(value.SomeString);
  64. writer.Name("vehicles");
  65. _vehicleListAdapter.ToMValue(value.Vehicles, writer);
  66. writer.EndObject();
  67. }
  68.  
  69. public void ToMValue(object obj, IMValueWriter writer)
  70. {
  71. if (obj is MainClass value)
  72. {
  73. ToMValue(value, writer);
  74. }
  75. }
  76.  
  77. object IMValueBaseAdapter.FromMValue(IMValueReader reader) => FromMValue(reader);
  78. }
  79.  
  80.  
  81. public class VehicleDto : IMValueConvertible
  82. {
  83. private static readonly IMValueBaseAdapter _myAdapter = new VehicleDataAdapter();
  84. public string Model { get; set; }
  85. public string PlateText { get; set; }
  86.  
  87. public VehicleDto(string model, string plateText)
  88. {
  89. Model = model;
  90. PlateText = plateText;
  91. }
  92.  
  93. public IMValueBaseAdapter GetAdapter() => _myAdapter;
  94. }
  95.  
  96. public class VehicleDataAdapter : IMValueAdapter<VehicleDto>
  97. {
  98. public VehicleDto FromMValue(IMValueReader reader)
  99. {
  100. reader.BeginObject();
  101. string model = null;
  102. string plateText = null;
  103. while (reader.HasNext())
  104. {
  105. switch (reader.NextName())
  106. {
  107. case "model":
  108. model = reader.NextString();
  109. break;
  110. case "plateText":
  111. plateText = reader.NextString();
  112. break;
  113. default:
  114. reader.SkipValue();
  115. break;
  116. }
  117. }
  118.  
  119. reader.EndObject();
  120. return model == null ? null : new VehicleDto(model, plateText);
  121. }
  122.  
  123. public void ToMValue(VehicleDto value, IMValueWriter writer)
  124. {
  125. writer.BeginObject();
  126. writer.Name("model");
  127. writer.Value(value.Model);
  128. writer.Name("plateText");
  129. writer.Value(value.PlateText);
  130. writer.EndObject();
  131. }
  132.  
  133. public void ToMValue(object obj, IMValueWriter writer)
  134. {
  135. if (obj is VehicleDto value)
  136. {
  137. ToMValue(value, writer);
  138. }
  139. }
  140.  
  141. object IMValueBaseAdapter.FromMValue(IMValueReader reader) => FromMValue(reader);
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement