2016-10-27 10 views
1

では動作しません、それは次のコードで$タイプを読み取らない

// POST api/values 
[HttpPost("Order")] 
public string Order([FromBody] OrderRequest rq) 
{ 
    var a = new OrderRequest 
    { 
     Version = "12", 
     Typea = new MsgType 
     { 
      A = new MsgTypeA 
      { 
       Item = new MsgSubTypeA 
       { 
        SubA = "TEST" 
       } 
      } 
     } 
    }; 

    return JsonConvert.SerializeObject(a, Formatting.Indented, new JsonSerializerSettings 
    { 
     TypeNameHandling = TypeNameHandling.Auto//.All 
    }); 
} 

要求はただ

{ 
    "Typea": { 
     "A": {"Item":  { 
     "$type": "Services.WebReference.MsgSubTypeA, Services.WebReference", 
     "SubA":"TEST" 
     } 
     }} 
    } 
} 

ことです$型を読み取ることができず、型を正しい型に変換するのではなく、その基本クラスに変換することはできません。ただし、JsonConvert.SerializeObjectごとに生成される応答では、同じJSONが表示されます。

どういうところが間違っていますか?それは、今

public string Order([FromBody] JObject rq) 
{ 
    var obj = JsonConvert.DeserializeObject<OrderRequest>(rq.ToString(), new JsonSerializerSettings 
    { 
     TypeNameHandling = TypeNameHandling.Auto 
    }); 

を解決しています

+0

要求オブジェクトがrq..Whereであるあなたがコントローラでいることを使うのですか? –

+0

@MarcusH申し訳ありません..私はあなたの質問を理解していません。 – Elaine

答えて

2

もう一つの方法は、より良いかもしれない:

services 
    .AddMvc() 
    .AddJsonOptions(options => 
    { 
     options.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto; 
    }) 
+0

これは私を大いに助けましたが、私の場合は2つの異なるプロジェクトがありました。これは名前空間が異なるため、Jsonオブジェクトの間違った名前空間を置き換えるためにreplaceを使用して解決しました。 – Aesir

関連する問題