J'ai une classe ApiController
avec une méthode acceptant un objet complexe.WebApi - Guide envoyé pris comme nouveau guide
public class SampleController : ApiController
{
[Route("api/Sample/")]
[HttpPost]
public HttpResponseMessage GetSampleInfo([FromBody]SampleClass sampleClassObject)
{
// Some code
}
}
Lorsque le débogage, cette méthode de classe Controller
est appelée, mais ce qui a été passé en Guid
dans l'objet, montre une nouvelle Guid
(comme 00000000-0000-0000-0000-000000000000
). Je vérifie d'abord cette méthode avec Postman. J'ai essayé de passer l'objet en utilisant x-www-form-urlencoded
et aussi application/json
.
Qu'est-ce que je passe dans Postman:
{
"sampleID": "A9A999AA-AA99-9AA9-A999-9999999999AA",
"otherValue": 1
}
J'ai vérifié d'autres questions comme la mienne, mais je l'ai essayé les solutions mais je reçois le passé Guid
comme une nouvelle Guid
.
P.S. Le SampleClass
ressemble comme suit:
public class SampleClass
{
public Guid sampleID { get; set; }
public int otherValue { get; set; }
}
Mise à jour:
J'ai utilisé le JsonConverter
suivant.
public class GuidConverterCustom : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Guid) == objectType;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.Null:
return Guid.Empty;
case JsonToken.String:
string str = reader.Value as string;
if (string.IsNullOrEmpty(str))
{
return Guid.Empty;
}
else
{
return new Guid(str);
}
default:
throw new ArgumentException("Invalid token type");
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (Guid.Empty.Equals(value))
{
writer.WriteValue("");
}
else
{
writer.WriteValue((Guid)value);
}
}
}
et inclus les éléments suivants dans le Global.asax.cs
:
JsonConvert.DefaultSettings =() =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new GuidConverterCustom());
return settings;
};
Vous devez ajouter comment 'SampleClass' semble aussi bien. – Ogglas
pouvez-vous afficher la définition de la classe – narekye
@Ogglas Merci. J'ai mis à jour ma question. – Curiousity