mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-30 04:13:40 +01:00
Add serialize/deserialize helper functions to SeString
This commit is contained in:
parent
a4ae5f0ad2
commit
7661c4fe2d
1 changed files with 39 additions and 0 deletions
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Dalamud.Data;
|
||||||
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
using Dalamud.Game.Chat.SeStringHandling.Payloads;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
|
@ -102,5 +103,43 @@ namespace Dalamud.Game.Chat.SeStringHandling
|
||||||
|
|
||||||
return messageBytes.ToArray();
|
return messageBytes.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Serializes the SeString to json
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>An json representation of this object</returns>
|
||||||
|
public string ToJson()
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(this, Formatting.Indented, new JsonSerializerSettings()
|
||||||
|
{
|
||||||
|
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
|
||||||
|
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
|
||||||
|
TypeNameHandling = TypeNameHandling.Auto
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a SeString from a json. (For testing - not recommended for production use.)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="json">A serialized SeString produced by ToJson() <see cref="ToJson"/></param>
|
||||||
|
/// <param name="dataManager">An initialized instance of DataManager for Lumina queries.</param>
|
||||||
|
/// <returns>A SeString initialized with values from the json</returns>
|
||||||
|
public static SeString FromJson(string json, DataManager dataManager)
|
||||||
|
{
|
||||||
|
var s = JsonConvert.DeserializeObject<SeString>(json, new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
|
||||||
|
TypeNameHandling = TypeNameHandling.Auto,
|
||||||
|
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach(var payload in s.Payloads)
|
||||||
|
{
|
||||||
|
var dataResolver = payload.GetType().GetField("DataResolver", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||||
|
dataResolver.SetValue(payload, dataManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue