我想了解如何在调用_jsRuntime.InvokeAsync
方法时设置json序列化器转换器设置。它自身的方法不接受任何json序列化设置。我相信你需要设置项目的设置。到目前为止,我还没能找到实现这一目标的方法。
我的转换器:
public class VectorConverter : JsonConverter<System.Numerics.Vector3>
{
public override System.Numerics.Vector3 Read(ref Utf8JsonReader reader,
Type typeToConvert, JsonSerializerOptions options)
{
if(reader.TokenType != JsonTokenType.StartObject)
{
throw new JsonException();
}
System.Numerics.Vector3 result = new System.Numerics.Vector3();
while (reader.Read())
{
if(reader.TokenType == JsonTokenType.EndObject)
{
return result;
}
if(reader.TokenType != JsonTokenType.PropertyName)
{
throw new JsonException();
}
switch(reader.GetString())
{
case "x":
result.X = (float)reader.GetDouble();
break;
case "y":
result.Y = (float)reader.GetDouble();
break;
case "z":
result.Z = (float)reader.GetDouble();
break;
}
}
throw new JsonException();
}
public override void Write(Utf8JsonWriter writer,
System.Numerics.Vector3 value, JsonSerializerOptions options)
{
writer.WriteNumber("x", value.X);
writer.WriteNumber("y", value.Y);
writer.WriteNumber("z", value.Z);
}
}
在撰写本文时,很遗憾,在Blazor应用程序中修改JSON序列化程序配置是不可能的(而且仍然不可能(。为JSRuntime
抽象基类配置的JsonSerializerOptions
实例是内部的,并且仅为getter。所以我们没有办法修改Converters
集合。它甚至不是虚拟的,所以您将无法对JSRuntime
本身进行子类化。
这里有相关消息来源。
同样值得一提的是,它也没有使用静态Default
实例,顺便说一句,这也不可能配置,因为在应用程序的入口点中,它似乎已经被使用过了(并且有一个检查,一旦使用就不会修改它(。不过这并不重要,因为JSRuntime
不使用这个。