fix actor serialization
This commit is contained in:
parent
4875e71340
commit
cf2c8a38d4
3 changed files with 52 additions and 3 deletions
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Text.Json.Serialization;
|
using System.Collections.Generic;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using JsonConverter = Newtonsoft.Json.JsonConverter;
|
||||||
|
|
||||||
namespace BirdsiteLive.ActivityPub
|
namespace BirdsiteLive.ActivityPub
|
||||||
{
|
{
|
||||||
|
@ -8,7 +9,8 @@ namespace BirdsiteLive.ActivityPub
|
||||||
{
|
{
|
||||||
//[JsonPropertyName("@context")]
|
//[JsonPropertyName("@context")]
|
||||||
[JsonProperty("@context")]
|
[JsonProperty("@context")]
|
||||||
public object[] context { get; set; } = new[] {"https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" };
|
[JsonConverter(typeof(ContextArrayConverter))]
|
||||||
|
public string[] context { get; set; } = new[] { "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" };
|
||||||
public string id { get; set; }
|
public string id { get; set; }
|
||||||
public string type { get; set; }
|
public string type { get; set; }
|
||||||
public string preferredUsername { get; set; }
|
public string preferredUsername { get; set; }
|
||||||
|
@ -20,4 +22,37 @@ namespace BirdsiteLive.ActivityPub
|
||||||
public Image icon { get; set; }
|
public Image icon { get; set; }
|
||||||
public Image image { get; set; }
|
public Image image { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ContextArrayConverter : JsonConverter
|
||||||
|
{
|
||||||
|
public override bool CanWrite { get { return false; } }
|
||||||
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var result = new List<string>();
|
||||||
|
|
||||||
|
var list = serializer.Deserialize<List<object>>(reader);
|
||||||
|
foreach (var l in list)
|
||||||
|
{
|
||||||
|
if (l is string s)
|
||||||
|
result.Add(s);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var str = JsonConvert.SerializeObject(l);
|
||||||
|
result.Add(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanConvert(Type objectType)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ namespace BirdsiteLive.Controllers
|
||||||
|
|
||||||
private Dictionary<string, string> RequestHeaders(IHeaderDictionary header)
|
private Dictionary<string, string> RequestHeaders(IHeaderDictionary header)
|
||||||
{
|
{
|
||||||
return header.ToDictionary<KeyValuePair<string, StringValues>, string, string>(h => h.Key, h => h.Value);
|
return header.ToDictionary<KeyValuePair<string, StringValues>, string, string>(h => h.Key.ToLowerInvariant(), h => h.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -16,6 +16,20 @@ namespace BirdsiteLive.ActivityPub.Tests
|
||||||
var actor = JsonConvert.DeserializeObject<Actor>(json);
|
var actor = JsonConvert.DeserializeObject<Actor>(json);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Serialize()
|
||||||
|
{
|
||||||
|
var obj = new Actor
|
||||||
|
{
|
||||||
|
type = "Person",
|
||||||
|
id = "id"
|
||||||
|
};
|
||||||
|
|
||||||
|
var json = JsonConvert.SerializeObject(obj);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue