Guest User

Untitled

a guest
Jul 20th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.94 KB | None | 0 0
  1. public interface IReagent
  2. {
  3. int ItemId { get; set; }
  4. int Quantity { get; set; }
  5. ConcurrentBag<IReagent> Reagents { get; set; }
  6. }
  7.  
  8. public class Craft : IReagent
  9. {
  10. public int ItemId { get; set; }
  11. public int Quantity { get; set; }
  12. public int SpellId { get; set; }
  13. public int Skill { get; set; }
  14. public Profession Profession { get; set; }
  15. public ConcurrentBag<IReagent> Reagents { get; set; }
  16. }
  17.  
  18. public class Reagent : IReagent
  19. {
  20. public int ItemId { get; set; }
  21. public int Quantity { get; set; }
  22. public ConcurrentBag<IReagent> Reagents { get; set; }
  23. }
  24.  
  25. /* 28 */
  26. {
  27. "_id" : ObjectId("4e497efa97e8b617f0d229d4"),
  28. "ItemId" : 52186,
  29. "Quantity" : 0,
  30. "SpellId" : 0,
  31. "Skill" : 475,
  32. "Profession" : 8,
  33. "Reagents" : { }
  34. }
  35.  
  36. {
  37. "_id" : ObjectId("4e497efa97e8b617f0d229d4"),
  38. "ItemId" : 52186,
  39. "Quantity" : 0,
  40. "SpellId" : 0,
  41. "Skill" : 475,
  42. "Profession" : 8,
  43. "Reagents" : [
  44. {
  45. "ItemId" : 521833,
  46. "Quantity" : 3,
  47. "SpellId" : 0,
  48. "Skill" : 400,
  49. "Profession" : 7,
  50. "Reagents" : [
  51. {
  52. "ItemId" : 52186,
  53. "Quantity" : 3,
  54. "SpellId" : 0,
  55. "Skill" : 475,
  56. "Profession" : 8,
  57. "Reagents" : [
  58. {
  59. "ItemId" : 52183,
  60. "Quantity" : 2,
  61. "Reagents" : []
  62. },
  63. {
  64. "ItemId" : 521832,
  65. "Quantity" : 1,
  66. "Reagents" : []
  67. }
  68. ]
  69. },
  70. {
  71. "ItemId" : 52386,
  72. "Quantity" : 2
  73. "SpellId" : 0,
  74. "Skill" : 400,
  75. "Profession" : 8,
  76. "Reagents" : [
  77. {
  78. "ItemId" : 52383,
  79. "Quantity" : 2,
  80. "Reagents" : []
  81. },
  82. {
  83. "ItemId" : 523832,
  84. "Quantity" : 1,
  85. "Reagents" : []
  86. }
  87. ]
  88. }
  89. ]
  90. }
  91. ]
  92. }
  93.  
  94. public class FieldsWrapper : IBsonSerializable
  95. {
  96. public List<DataFieldValue> DataFieldValues { get; set; }
  97.  
  98.  
  99. public object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
  100. {
  101. if (nominalType != typeof(FieldsWrapper)) throw new ArgumentException("Cannot deserialize anything but self");
  102. var doc = BsonDocument.ReadFrom(bsonReader);
  103. var list = new List<DataFieldValue>();
  104. foreach (var name in doc.Names)
  105. {
  106. var val = doc[name];
  107. if (val.IsString)
  108. list.Add(new DataFieldValue {LocalIdentifier = name, Values = new List<string> {val.AsString}});
  109. else if (val.IsBsonArray)
  110. {
  111. DataFieldValue df = new DataFieldValue {LocalIdentifier = name};
  112. foreach (var elem in val.AsBsonArray)
  113. {
  114. df.Values.Add(elem.AsString);
  115. }
  116. list.Add(df);
  117. }
  118. }
  119. return new FieldsWrapper {DataFieldValues = list};
  120. }
  121.  
  122.  
  123. public void Serialize(MongoDB.Bson.IO.BsonWriter bsonWriter, Type nominalType, IBsonSerializationOptions options)
  124. {
  125. if (nominalType != typeof (FieldsWrapper))
  126. throw new ArgumentException("Cannot serialize anything but self");
  127. bsonWriter.WriteStartDocument();
  128. foreach (var dataFieldValue in DataFieldValues)
  129. {
  130.  
  131. bsonWriter.WriteName(dataFieldValue.LocalIdentifier);
  132. if (dataFieldValue.Values.Count != 1)
  133. {
  134. var list = new string[dataFieldValue.Values.Count];
  135. for (int i = 0; i < dataFieldValue.Values.Count; i++)
  136. list[i] = dataFieldValue.Values[i];
  137. BsonSerializer.Serialize(bsonWriter, list);
  138. }
  139. else
  140. {
  141. BsonSerializer.Serialize(bsonWriter, dataFieldValue.Values[0]);
  142. }
  143. }
  144. bsonWriter.WriteEndDocument();
  145. }
  146.  
  147. }
  148.  
  149. /* 3131 */
  150. {
  151. "_id" : ObjectId("4e4d58df77d2cf00691aaef2"),
  152. "ItemId" : 28432,
  153. "Quantity" : 0,
  154. "Reagents" : [{
  155. "ItemId" : 23448,
  156. "Quantity" : 0,
  157. "Reagents" : [{
  158. "ItemId" : 23447,
  159. "Quantity" : 0,
  160. "Reagents" : [{
  161. "ItemId" : 23427,
  162. "Quantity" : 2,
  163. "Reagents" : []
  164. }]
  165. }, {
  166. "ItemId" : 23445,
  167. "Quantity" : 0,
  168. "Reagents" : [{
  169. "ItemId" : 23424,
  170. "Quantity" : 2,
  171. "Reagents" : []
  172. }]
  173. }]
  174. }, {
  175. "ItemId" : 23572,
  176. "Quantity" : 8,
  177. "Reagents" : []
  178. }, {
  179. "ItemId" : 28431,
  180. "Quantity" : 0,
  181. "Reagents" : [{
  182. "ItemId" : 23571,
  183. "Quantity" : 0,
  184. "Reagents" : [{
  185. "ItemId" : 21885,
  186. "Quantity" : 1,
  187. "Reagents" : []
  188. }, {
  189. "ItemId" : 21884,
  190. "Quantity" : 1,
  191. "Reagents" : []
  192. }, {
  193. "ItemId" : 22451,
  194. "Quantity" : 0,
  195. "Reagents" : [{
  196. "ItemId" : 21885,
  197. "Quantity" : 1,
  198. "Reagents" : []
  199. }]
  200. }, {
  201. "ItemId" : 22452,
  202. "Quantity" : 1,
  203. "Reagents" : []
  204. }, {
  205. "ItemId" : 22457,
  206. "Quantity" : 0,
  207. "Reagents" : [{
  208. "ItemId" : 21884,
  209. "Quantity" : 1,
  210. "Reagents" : []
  211. }]
  212. }]
  213. }, {
  214. "ItemId" : 22456,
  215. "Quantity" : 0,
  216. "Reagents" : [{
  217. "ItemId" : 21885,
  218. "Quantity" : 1,
  219. "Reagents" : []
  220. }]
  221. }, {
  222. "ItemId" : 23573,
  223. "Quantity" : 0,
  224. "Reagents" : [{
  225. "ItemId" : 23446,
  226. "Quantity" : 0,
  227. "Reagents" : [{
  228. "ItemId" : 23425,
  229. "Quantity" : 2,
  230. "Reagents" : []
  231. }]
  232. }]
  233. }, {
  234. "ItemId" : 23448,
  235. "Quantity" : 0,
  236. "Reagents" : [{
  237. "ItemId" : 23447,
  238. "Quantity" : 0,
  239. "Reagents" : [{
  240. "ItemId" : 23427,
  241. "Quantity" : 2,
  242. "Reagents" : []
  243. }]
  244. }, {
  245. "ItemId" : 23445,
  246. "Quantity" : 0,
  247. "Reagents" : [{
  248. "ItemId" : 23424,
  249. "Quantity" : 2,
  250. "Reagents" : []
  251. }]
  252. }]
  253. }]
  254. }]
  255. }
  256.  
  257. public void Serialize(MongoDB.Bson.IO.BsonWriter bsonWriter, Type nominalType, MongoDB.Bson.Serialization.IBsonSerializationOptions options)
  258. {
  259. if (nominalType != typeof(IReagent) && nominalType != typeof(Reagent) && nominalType != typeof(Craft))
  260. {
  261. throw new ArgumentException("Cannot serialize anything but self");
  262. }
  263.  
  264. bsonWriter.WriteStartDocument();
  265.  
  266. bsonWriter.WriteInt32("ItemId", this.ItemId);
  267. bsonWriter.WriteInt32("Quantity", this.Quantity);
  268.  
  269. if (this.Reagents != null)
  270. {
  271. bsonWriter.WriteName("Reagents");
  272. bsonWriter.WriteStartArray();
  273.  
  274. foreach (var r in this.Reagents)
  275. {
  276. BsonSerializer.Serialize(bsonWriter, r.GetType(), r, options);
  277. }
  278.  
  279. bsonWriter.WriteEndArray();
  280. }
  281.  
  282. bsonWriter.WriteEndDocument();
  283.  
  284. }
Add Comment
Please, Sign In to add comment