Skip to content

Instantly share code, notes, and snippets.

@onionmk2
Last active August 17, 2022 20:08
Show Gist options
  • Save onionmk2/d2e3e4cca27a37a89796e084e05de212 to your computer and use it in GitHub Desktop.
Save onionmk2/d2e3e4cca27a37a89796e084e05de212 to your computer and use it in GitHub Desktop.
Json.Net ( Newtonsoft.Json ) in Unity
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using UnityEngine;
public class UsingJsonDotNetInUnity : MonoBehaviour
{
private void Awake()
{
var accountJames = new Account
{
Email = "james@example.com",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
Roles = new List<string>
{
"User",
"Admin"
},
Ve = new Vector3(10, 3, 1),
StrVector3Dictionary = new Dictionary<string, Vector3>
{
{"start", new Vector3(0, 0, 1)},
{"end", new Vector3(9, 0, 1)}
}
};
var accountOnion = new Account
{
Email = "onion@example.co.uk",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
Roles = new List<string>
{
"User",
"Admin"
},
Ve = new Vector3(0, 3, 1),
StrVector3Dictionary = new Dictionary<string, Vector3>
{
{"vr", new Vector3(0, 0, 1)},
{"pc", new Vector3(9, 9, 1)}
}
};
var setting = new JsonSerializerSettings();
setting.Formatting = Formatting.Indented;
setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// write
var accountsFromCode = new List<Account> {accountJames, accountOnion};
var json = JsonConvert.SerializeObject(accountsFromCode, setting);
var path = Path.Combine(Application.dataPath, "hi.json");
File.WriteAllText(path, json);
// read
var fileContent = File.ReadAllText(path);
var accountsFromFile = JsonConvert.DeserializeObject<List<Account>>(fileContent);
var reSerializedJson = JsonConvert.SerializeObject(accountsFromFile, setting);
print(reSerializedJson);
print("json == reSerializedJson is" + (json == reSerializedJson));
}
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
public Vector3 Ve { get; set; }
public Dictionary<string, Vector3> StrVector3Dictionary { get; set; }
}
}
@helixen
Copy link

helixen commented Dec 13, 2019

I could catch the problem, the error is that the JsonConvert.DeserializeObject cannot deserialize an array to IEnumrable, but it only happens when it's running on Android device, I'm in a hurry for delivery so I had to use another library. I'm testing on Samsung Galaxy S9 Android Version 9.

@Hubinga
Copy link

Hubinga commented Apr 7, 2020

Thanks a lot now we managed it working in built version. <3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment