Advertisement
spacechase0

Untitled

May 11th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.23 KB | None | 0 0
  1. using StardewValley;
  2. using StardewValley.Characters;
  3. using StardewValley.Monsters;
  4. using StardewValley.Objects;
  5. using StardewValley.TerrainFeatures;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Xml;
  12. using System.Xml.Serialization;
  13.  
  14. namespace StardewMountain.Vanilla
  15. {
  16.     [XmlRoot("dictionary")]
  17.     public class NewSerializableDictionary< TKey, TValue > : SerializableDictionary< TKey, TValue >, IXmlSerializable
  18.     {
  19.         private Type[] types = new Type[]
  20.     {
  21.       typeof (Tool),
  22.       typeof (StardewValley.Monsters.Crow),
  23.       typeof (Duggy),
  24.       typeof (Fireball),
  25.       typeof (Ghost),
  26.       typeof (GreenSlime),
  27.       typeof (LavaCrab),
  28.       typeof (RockCrab),
  29.       typeof (ShadowGuy),
  30.       typeof (SkeletonWarrior),
  31.       typeof (Child),
  32.       typeof (Pet),
  33.       typeof (Dog),
  34.       typeof (StardewValley.Characters.Cat),
  35.       typeof (Horse),
  36.       typeof (SquidKid),
  37.       typeof (Grub),
  38.       typeof (Fly),
  39.       typeof (DustSpirit),
  40.       typeof (Bug),
  41.       typeof (BigSlime),
  42.       typeof (BreakableContainer),
  43.       typeof (MetalHead),
  44.       typeof (ShadowGirl),
  45.       typeof (Monster),
  46.       typeof (JunimoHarvester),
  47.       typeof (TerrainFeature)
  48.     };
  49.  
  50.     public new void ReadXml(XmlReader reader)
  51.         {
  52.             XmlSerializer xmlSerializer1 = SaveGame.serializer; //new XmlSerializer(typeof(TKey));
  53.             XmlSerializer xmlSerializer2 = new XmlSerializer(typeof(TValue), types.Concat(Entoarox.Framework.EntoFramework.GetTypeRegistry().GetInjectedTypes()).ToArray());
  54.             int num = reader.IsEmptyElement ? 1 : 0;
  55.             reader.Read();
  56.             if (num != 0)
  57.                 return;
  58.             while (reader.NodeType != XmlNodeType.EndElement)
  59.             {
  60.                 reader.ReadStartElement("item");
  61.                 reader.ReadStartElement("key");
  62.                 TKey key = (TKey)xmlSerializer1.Deserialize(reader);
  63.                 reader.ReadEndElement();
  64.                 reader.ReadStartElement("value");
  65.                 TValue obj = (TValue)xmlSerializer2.Deserialize(reader);
  66.                 reader.ReadEndElement();
  67.                 this.Add(key, obj);
  68.                 reader.ReadEndElement();
  69.                 int content = (int)reader.MoveToContent();
  70.             }
  71.             reader.ReadEndElement();
  72.         }
  73.  
  74.  
  75.  
  76.         public new void WriteXml(XmlWriter writer)
  77.         {
  78.             XmlSerializer xmlSerializer1 = new XmlSerializer(typeof(TKey));
  79.             XmlSerializer xmlSerializer2 = new XmlSerializer(typeof(TValue), types.Concat( Entoarox.Framework.EntoFramework.GetTypeRegistry().GetInjectedTypes()).ToArray());
  80.             foreach (TKey key in this.Keys)
  81.             {
  82.                 writer.WriteStartElement("item");
  83.                 writer.WriteStartElement("key");
  84.                 xmlSerializer1.Serialize(writer, (object)key);
  85.                 writer.WriteEndElement();
  86.                 writer.WriteStartElement("value");
  87.                 TValue obj = this[key];
  88.                 xmlSerializer2.Serialize(writer, (object)obj);
  89.                 writer.WriteEndElement();
  90.                 writer.WriteEndElement();
  91.             }
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement