这是我的JSON请求对象
public class CategoryCreateOrUpdateCommand: IRequest<BaseApiStateResponse>
{
public Guid? Id { get; set; }
public string Name { get; set; }
}
我的控制器操作如下所示
[HttpPost, Route("api/category-put")]
public Task<BaseApiStateResponse> CreateOrUpdate([FromBody] CategoryCreateOrUpdateCommand command)
{
//Do stuff
}
我有以下JsonConverter,它可以在Guid和Base64编码的字符串之间进行转换,以降低流量。
public class ShortGuidConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Guid) || objectType == typeof(Guid?);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (existingValue == null)
return null;
string base64Value = existingValue + "==";
byte[] bytes = Convert.FromBase64String(base64Value);
return new Guid(bytes);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Guid? guid = (Guid?)value;
if (!guid.HasValue)
{
writer.WriteNull();
}
else
{
string base64Value = Convert.ToBase64String(guid.Value.ToByteArray());
base64Value = base64Value.Substring(0, base64Value.Length - 2);
writer.WriteValue(base64Value);
}
}
}
这很好地序列化了传出的Guids,但是当从客户端收到请求时,传递到existingValue
的{{1}}参数始终为null。
我错过了什么?注册如下:
ReadJson
答案 0 :(得分:1)
解决方案是改为从reader.Value
读取。