diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/StardewModdingAPI/Manifest.cs | 1 | ||||
-rw-r--r-- | src/StardewModdingAPI/ModHelper.cs | 15 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/StardewModdingAPI/Manifest.cs b/src/StardewModdingAPI/Manifest.cs index 018b31ae..07dd3541 100644 --- a/src/StardewModdingAPI/Manifest.cs +++ b/src/StardewModdingAPI/Manifest.cs @@ -8,6 +8,7 @@ namespace StardewModdingAPI internal class ManifestImpl : Manifest, IManifest { /// <summary>The mod version.</summary> + [JsonProperty("Version", ObjectCreationHandling = ObjectCreationHandling.Auto/* avoids issue where Json.NET can't determine concrete type for interface */)] public new ISemanticVersion Version { get { return base.Version; } diff --git a/src/StardewModdingAPI/ModHelper.cs b/src/StardewModdingAPI/ModHelper.cs index 7304c5ea..78b3eefa 100644 --- a/src/StardewModdingAPI/ModHelper.cs +++ b/src/StardewModdingAPI/ModHelper.cs @@ -11,6 +11,17 @@ namespace StardewModdingAPI public class ModHelper : IModHelper { /********* + ** Properties + *********/ + /// <summary>The JSON settings to use when serialising and deserialising files.</summary> + private readonly JsonSerializerSettings JsonSettings = new JsonSerializerSettings + { + Formatting = Formatting.Indented, + ObjectCreationHandling = ObjectCreationHandling.Replace // avoid issue where default ICollection<T> values are duplicated each time the config is loaded + }; + + + /********* ** Accessors *********/ /// <summary>The mod directory path.</summary> @@ -82,7 +93,7 @@ namespace StardewModdingAPI } // deserialise model - TModel model = JsonConvert.DeserializeObject<TModel>(json); + TModel model = JsonConvert.DeserializeObject<TModel>(json, this.JsonSettings); if (model is IConfigFile) { var wrapper = (IConfigFile)model; @@ -108,7 +119,7 @@ namespace StardewModdingAPI Directory.CreateDirectory(dir); // write file - string json = JsonConvert.SerializeObject(model, Formatting.Indented); + string json = JsonConvert.SerializeObject(model, this.JsonSettings); File.WriteAllText(path, json); } } |