diff --git a/Client/Scripting/ClientFile.cs b/Client/Scripting/ClientFile.cs
index 17f7c24..034ed60 100644
--- a/Client/Scripting/ClientFile.cs
+++ b/Client/Scripting/ClientFile.cs
@@ -1,9 +1,9 @@
-using Newtonsoft.Json;
-using RageCoop.Core.Scripting;
+using RageCoop.Core.Scripting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace RageCoop.Client.Scripting
@@ -14,7 +14,7 @@ namespace RageCoop.Client.Scripting
GetStream = GetStreamMethod;
}
- [JsonProperty]
+ [JsonInclude]
public string FullPath { get; internal set; }
Stream GetStreamMethod()
{
diff --git a/Client/Scripting/ClientResource.cs b/Client/Scripting/ClientResource.cs
index 04ae22c..85d7c18 100644
--- a/Client/Scripting/ClientResource.cs
+++ b/Client/Scripting/ClientResource.cs
@@ -1,11 +1,11 @@
-using Newtonsoft.Json;
-using RageCoop.Core.Scripting;
+using RageCoop.Core.Scripting;
using SHVDN;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace RageCoop.Client.Scripting
@@ -17,25 +17,25 @@ namespace RageCoop.Client.Scripting
///
/// Name of the resource
///
- [JsonProperty]
+ [JsonInclude]
public string Name { get; internal set; }
///
/// Directory where the scripts is loaded from
///
- [JsonProperty]
+ [JsonInclude]
public string ScriptsDirectory { get; internal set; }
///
/// A resource-specific folder that can be used to store your files.
///
- [JsonProperty]
+ [JsonInclude]
public string DataFolder { get; internal set; }
///
/// Get the where this script is loaded from.
///
- [JsonProperty]
+ [JsonInclude]
public Dictionary Files { get; internal set; } = new Dictionary();
///
diff --git a/Client/Scripts/Menus/Sub/DevToolMenu.cs b/Client/Scripts/Menus/Sub/DevToolMenu.cs
index 40cd351..6580f36 100644
--- a/Client/Scripts/Menus/Sub/DevToolMenu.cs
+++ b/Client/Scripts/Menus/Sub/DevToolMenu.cs
@@ -5,7 +5,6 @@ using GTA;
using GTA.Native;
using GTA.UI;
using LemonUI.Menus;
-using Newtonsoft.Json;
using RageCoop.Core;
diff --git a/Client/Scripts/Menus/Sub/ServersMenu.cs b/Client/Scripts/Menus/Sub/ServersMenu.cs
index 021e6f3..a11989e 100644
--- a/Client/Scripts/Menus/Sub/ServersMenu.cs
+++ b/Client/Scripts/Menus/Sub/ServersMenu.cs
@@ -7,7 +7,6 @@ using System.Net.Http;
using System.Threading;
using GTA.UI;
using LemonUI.Menus;
-using Newtonsoft.Json;
using RageCoop.Client.Scripting;
using RageCoop.Core;
diff --git a/Client/Scripts/PlayerList.cs b/Client/Scripts/PlayerList.cs
index 9382b3a..3668791 100644
--- a/Client/Scripts/PlayerList.cs
+++ b/Client/Scripts/PlayerList.cs
@@ -1,11 +1,11 @@
using System.Collections.Generic;
using System.Linq;
using System.Net;
+using System.Text.Json.Serialization;
using GTA;
using GTA.Math;
using GTA.Native;
using Lidgren.Network;
-using Newtonsoft.Json;
using RageCoop.Client.Menus;
using RageCoop.Client.Scripting;
using RageCoop.Core;
diff --git a/Client/Scripts/RageCoop.Client.csproj b/Client/Scripts/RageCoop.Client.csproj
index 0f0589f..f6d4681 100644
--- a/Client/Scripts/RageCoop.Client.csproj
+++ b/Client/Scripts/RageCoop.Client.csproj
@@ -37,7 +37,6 @@
-
diff --git a/Client/Scripts/Scripting/API.Remoting.cs b/Client/Scripts/Scripting/API.Remoting.cs
index fc1844b..4a03272 100644
--- a/Client/Scripts/Scripting/API.Remoting.cs
+++ b/Client/Scripts/Scripting/API.Remoting.cs
@@ -1,5 +1,4 @@
-using Newtonsoft.Json;
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
diff --git a/Client/Scripts/Scripting/API.cs b/Client/Scripts/Scripting/API.cs
index 84a1dae..cedc820 100644
--- a/Client/Scripts/Scripting/API.cs
+++ b/Client/Scripts/Scripting/API.cs
@@ -1,6 +1,5 @@
#undef DEBUG
using Lidgren.Network;
-using Newtonsoft.Json;
using RageCoop.Client.Menus;
using RageCoop.Core;
using RageCoop.Core.Scripting;
diff --git a/Client/Scripts/Util/Util.cs b/Client/Scripts/Util/Util.cs
index dba83a4..6eba97c 100644
--- a/Client/Scripts/Util/Util.cs
+++ b/Client/Scripts/Util/Util.cs
@@ -8,7 +8,6 @@ using GTA.Math;
using GTA.Native;
using GTA.UI;
using LemonUI.Elements;
-using Newtonsoft.Json;
using RageCoop.Core;
using static RageCoop.Client.Shared;
using Font = GTA.UI.Font;
diff --git a/Client/Scripts/Util/WeaponUtil.cs b/Client/Scripts/Util/WeaponUtil.cs
index 2091d76..aed3d6c 100644
--- a/Client/Scripts/Util/WeaponUtil.cs
+++ b/Client/Scripts/Util/WeaponUtil.cs
@@ -3,7 +3,6 @@ using System.IO;
using GTA;
using GTA.Math;
using GTA.Native;
-using Newtonsoft.Json;
using RageCoop.Client.Scripting;
using RageCoop.Core;
diff --git a/Core/CoreUtils.cs b/Core/CoreUtils.cs
index 452f407..5738d04 100644
--- a/Core/CoreUtils.cs
+++ b/Core/CoreUtils.cs
@@ -12,11 +12,11 @@ using System.Runtime.InteropServices;
using System.Runtime.Loader;
using System.Security.Cryptography;
using System.Text;
+using System.Text.Json.Serialization;
using System.Xml;
using GTA;
using GTA.Math;
using Lidgren.Network;
-using Newtonsoft.Json;
using RageCoop.Core.Scripting;
[assembly: InternalsVisibleTo("RageCoop.Server")]
@@ -390,9 +390,9 @@ namespace RageCoop.Core
internal class IpInfo
{
- [JsonProperty("ip")] public string Address { get; set; }
+ [JsonPropertyName("ip")] public string Address { get; set; }
- [JsonProperty("country")] public string Country { get; set; }
+ [JsonPropertyName("country")] public string Country { get; set; }
}
internal static class Extensions
diff --git a/Core/JsonCoverters.cs b/Core/JsonCoverters.cs
index 17a701d..e81495c 100644
--- a/Core/JsonCoverters.cs
+++ b/Core/JsonCoverters.cs
@@ -1,58 +1,54 @@
-using Newtonsoft.Json.Linq;
-using Newtonsoft.Json;
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace RageCoop.Core
{
- class IPAddressConverter : JsonConverter
+ class IPAddressConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(IPAddress));
+ return objectType == typeof(IPAddress);
}
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+ public override IPAddress Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
- writer.WriteValue(value.ToString());
+ if (reader.TokenType == JsonTokenType.Null) return null;
+ return IPAddress.Parse(reader.GetString());
}
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+ public override void Write(Utf8JsonWriter writer, IPAddress value, JsonSerializerOptions options)
{
- if (reader.TokenType == JsonToken.Null) return null;
- return IPAddress.Parse((string)reader.Value);
+ writer.WriteStringValue(value?.ToString());
}
}
- class IPEndPointConverter : JsonConverter
+ class IPEndPointConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(IPEndPoint));
+ return objectType == typeof(IPEndPoint);
+ }
+ public override IPEndPoint Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.Null) return null;
+ var jo = JsonNode.Parse(ref reader);
+ return new IPEndPoint(IPAddress.Parse(jo["Address"].ToString()), int.Parse(jo["Port"].ToString()));
}
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+ public override void Write(Utf8JsonWriter writer, IPEndPoint value, JsonSerializerOptions options)
{
- IPEndPoint ep = (IPEndPoint)value;
- JObject jo = new()
+ new JsonObject()
{
- { "Address", JToken.FromObject(ep.Address, serializer) },
- { "Port", ep.Port }
- };
- jo.WriteTo(writer);
- }
-
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- if (reader.TokenType == JsonToken.Null) return null;
- JObject jo = JObject.Load(reader);
- IPAddress address = jo["Address"].ToObject(serializer);
- int port = (int)jo["Port"];
- return new IPEndPoint(address, port);
+ { "Address", value.Address?.ToString() },
+ { "Port", value.Port }
+ }.WriteTo(writer);
}
}
diff --git a/Core/RageCoop.Core.csproj b/Core/RageCoop.Core.csproj
index 9003359..31f71b7 100644
--- a/Core/RageCoop.Core.csproj
+++ b/Core/RageCoop.Core.csproj
@@ -19,7 +19,6 @@
-
diff --git a/Core/Scripting/CustomEventHandler.cs b/Core/Scripting/CustomEventHandler.cs
index 4d3c19e..1ede59c 100644
--- a/Core/Scripting/CustomEventHandler.cs
+++ b/Core/Scripting/CustomEventHandler.cs
@@ -1,5 +1,5 @@
-using Newtonsoft.Json;
-using System.Runtime.InteropServices;
+using System.Runtime.InteropServices;
+using System.Text.Json.Serialization;
namespace RageCoop.Core.Scripting
{
@@ -44,10 +44,10 @@ namespace RageCoop.Core.Scripting
[JsonIgnore]
private CustomEventHandlerDelegate _managedHandler; // Used to keep GC reference
- [JsonProperty]
+ [JsonInclude]
public ulong FunctionPtr { get; private set; }
- [JsonProperty]
+ [JsonInclude]
public string Directory { get; private set; }
///
diff --git a/Core/Scripting/ResourceFile.cs b/Core/Scripting/ResourceFile.cs
index 7d936eb..a3e8d26 100644
--- a/Core/Scripting/ResourceFile.cs
+++ b/Core/Scripting/ResourceFile.cs
@@ -1,6 +1,6 @@
-using Newtonsoft.Json;
-using System;
+using System;
using System.IO;
+using System.Text.Json.Serialization;
namespace RageCoop.Core.Scripting
{
@@ -11,13 +11,13 @@ namespace RageCoop.Core.Scripting
///
/// Full name with relative path of this file
///
- [JsonProperty]
+ [JsonInclude]
public string Name { get; internal set; }
///
/// Whether this is a directory
///
- [JsonProperty]
+ [JsonInclude]
public bool IsDirectory { get; internal set; }
///
diff --git a/Core/Shared.cs b/Core/Shared.cs
index aaf7544..c0e46d6 100644
--- a/Core/Shared.cs
+++ b/Core/Shared.cs
@@ -1,8 +1,7 @@
global using static RageCoop.Core.Shared;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
using System;
using System.Reflection;
+using System.Text.Json;
namespace RageCoop.Core
{
@@ -24,22 +23,23 @@ namespace RageCoop.Core
JsonTypeCheck(obj?.GetType());
return obj;
}
- public static readonly JsonSerializerSettings JsonSettings = new();
+ public static readonly JsonSerializerOptions JsonSettings = new();
static Shared()
{
JsonSettings.Converters.Add(new IPAddressConverter());
JsonSettings.Converters.Add(new IPEndPointConverter());
- JsonSettings.Formatting = Formatting.Indented;
+ JsonSettings.WriteIndented = true;
+ JsonSettings.IncludeFields = true;
}
public static object JsonDeserialize(string text, Type type)
{
- return JsonConvert.DeserializeObject(text, JsonTypeCheck(type), JsonSettings);
+ return JsonSerializer.Deserialize(text, JsonTypeCheck(type), JsonSettings);
}
public static T JsonDeserialize(string text) => (T)JsonDeserialize(text, typeof(T));
- public static string JsonSerialize(object obj) => JsonConvert.SerializeObject(JsonTypeCheck(obj), JsonSettings);
+ public static string JsonSerialize(object obj) => JsonSerializer.Serialize(JsonTypeCheck(obj), JsonSettings);
///
/// Shortcut to
diff --git a/Core/VehicleWeaponInfo.cs b/Core/VehicleWeaponInfo.cs
index d38bf93..4077554 100644
--- a/Core/VehicleWeaponInfo.cs
+++ b/Core/VehicleWeaponInfo.cs
@@ -3,8 +3,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
-using Newtonsoft.Json;
-using Formatting = Newtonsoft.Json.Formatting;
namespace RageCoop.Core
{
diff --git a/Server/Networking/Server.Background.cs b/Server/Networking/Server.Background.cs
index b48fc93..b23d04d 100644
--- a/Server/Networking/Server.Background.cs
+++ b/Server/Networking/Server.Background.cs
@@ -9,7 +9,6 @@ using System.Text;
using System.Threading;
using ICSharpCode.SharpZipLib.Zip;
using Lidgren.Network;
-using Newtonsoft.Json;
using RageCoop.Core;
namespace RageCoop.Server;
diff --git a/Server/Program.cs b/Server/Program.cs
index 731a072..61029a9 100644
--- a/Server/Program.cs
+++ b/Server/Program.cs
@@ -1,6 +1,7 @@
using System;
using System.Diagnostics;
using System.IO;
+using System.Net;
using System.Threading;
using RageCoop.Core;
diff --git a/Server/RageCoop.Server.csproj b/Server/RageCoop.Server.csproj
index aec32a3..5a94e76 100644
--- a/Server/RageCoop.Server.csproj
+++ b/Server/RageCoop.Server.csproj
@@ -60,7 +60,6 @@
-
diff --git a/Tools/DataDumper/DataDumper.csproj b/Tools/DataDumper/DataDumper.csproj
index 745d8c8..60e736f 100644
--- a/Tools/DataDumper/DataDumper.csproj
+++ b/Tools/DataDumper/DataDumper.csproj
@@ -8,10 +8,6 @@
$(SolutionDir)bin\Tools\DataDumper
-
-
-
-
diff --git a/Tools/DataDumper/Program.cs b/Tools/DataDumper/Program.cs
index f214572..83474a8 100644
--- a/Tools/DataDumper/Program.cs
+++ b/Tools/DataDumper/Program.cs
@@ -1,8 +1,7 @@
-using System.Text;
+global using static RageCoop.Core.Shared;
+using System.Text;
using System.Xml;
-using Newtonsoft.Json;
using RageCoop.Core;
-using Formatting = Newtonsoft.Json.Formatting;
namespace DataDumper;
@@ -33,7 +32,7 @@ public static class Program
{
Dictionary weapons = new();
foreach (var f in Directory.GetFiles("meta", "*.meta")) Parse(f, weapons);
- File.WriteAllText("out/Weapons.json", JsonConvert.SerializeObject(weapons, Formatting.Indented));
+ File.WriteAllText("out/Weapons.json", JsonSerialize(weapons));
if (ToGenerate.HasFlag(GenFlags.WeaponHash)) DumpWeaponHash(weapons, true);
}