Web Api Rest $type Property Não Serializa

alfinete

Power Member
boas tardes
estou com um problema num projecto rest web-api em .net

temos uma propriedade do service no json que é enviado no serviço rest com o nome
"$type"

e na nossa classe a propriedade tem o nome type
logo temos a jsonproperty com o nome da mesma em Json

aqui a questão é que quando ele entra no metodo NewService
e eu vou ver o valor de type ele vem nulo e devria vir com o valor que esta no Json


como posso resolver esta questão se no Json temos sempre de ter $type
e no c# não podemos Criar uma property com o nome $type

obrigado aguardo

classe Service
_______________________________________________________
Código:
  public class Service
  {
  [DefaultValue("")]
  [JsonProperty(PropertyName = "$type")]
  public string type { get; set; }
  [DefaultValue(null)]
  public List<ApprovalRequest> ApprovalRequests { get; set; }
  [DefaultValue("")]
  public string CreationTimestamp { get; set; }
  [DefaultValue(null)]
  public List<ExternalReference> ExternalReferences { get; set; }
  [DefaultValue(null)]
  public List<Cost> IncurredCosts { get; set; }
  [DefaultValue("")]
  public string LastUpdateTimestamp { get; set; }
  [DefaultValue(null)]
  public List<MeasuredPerformance> MeasuredPerformances { get; set; }
  [DefaultValue("")]
  public string OperationalProcedureIdentifier { get; set; }
  [DefaultValue(null)]
  public List<PerformedAction> PerformedActions { get; set; }
  [DefaultValue(null)]
  public Location RequestedServiceLocation { get; set; }
  [DefaultValue(null)]
  public RequestedServiceProvider RequestedServiceProvider { get; set; }
  [DefaultValue(null)]
  public Party ServiceExecutor { get; set; }
  [DefaultValue(null)]
  public Party ServiceProvider { get; set; }
  [DefaultValue(null)]
  public Party ServiceRequestor { get; set; }
  [DefaultValue("")]
  public string Status { get; set; }
  [DefaultValue(null)]
  public StatusReason StatusReason { get; set; }

  }


função do controler
__________________________________________________________________________

Código:
 [DisableCors()]
  [HttpPost]
  [Route("Post/NewService")]
  [BasicAuthentication]
  public IHttpActionResult NewService(Service root)
  {
 // negocio
}


Dados passados para o root da função acima
________________________________________________

Código:
{
"$type":"Teste",
"Id":"1",
"CreationTimestamp":"2020-10-26T17:31:33.434Z",
"LastUpdateTimestamp":"2020-10-26T17:31:33.434Z",
"Status":"Requested"
}
 
criei uma função
que me dá o Json Request que se encontra no contexto do rest
________________________________________________________________________________________________________________
Código:
  private  string GetJasonRequest(HttpActionContext actionContext)
  {
  string requestBody = string.Empty;
  using (var stream = new MemoryStream())
  {
  var context = (HttpContextBase)actionContext.Request.Properties["MS_HttpContext"];
  context.Request.InputStream.Seek(0, SeekOrigin.Begin);
  context.Request.InputStream.CopyTo(stream);
  requestBody = Encoding.UTF8.GetString(stream.ToArray());
  }
  return requestBody;

  }


na função já existente
alteramos o nosso objecto
_______________________________________________________________________________________________________________
Código:
[DisableCors()]
  [HttpPost]
  [Route("Post/NewService")]
  [BasicAuthentication]
  public IHttpActionResult NewService(Service root)
  {
   Service rootSrv = null;
  string myJson  = GetJasonRequest (this.ActionContext);
  // substituimos Todos $type por type no nosso Json
   myJson  = MyJson.Replace("$type", "type");

 
   rootSrv = new Service ();
  // utilizando a bibliteca Newtonsoft.dll
   rootSrv = JsonConvert.DeserializeObject<Service >(MyJson);
}

na classe Service
alteramos a nossa prop para os eguinte
__________________________________________________
Código:
[DefaultValue("")]
  public string type { get; set; }


Resolvido

Obrigado na mesma
 
Back
Topo