2017-12-04 13 views
0

私は、Web API 2でどのように複雑なクラスをトランスフレーズできるか確信していません。 私が見つけたほとんどすべての例は、古いjsonポストクラスです(これはもはや存在しません)。新バージョンではそれほど見つからない。特に複雑なクラスになるとき。これらの例のほとんどは、NewtonSoftのような拡張機能を使用しています。拡張機能を使用せずにWeb API 2で複雑なクラスを転送するには?

私の質問は:以下の例では、(文字列に変換してクラスに変換するクラスにコンバーターを置くことを除いて)何かがあります拡張機能に頼っている?

サーバーの例:

public async Task<IHttpActionResult> DeviceConnect([FromBody]MyDevice device) 
{ 
    ...... // device is to be used and should be transferred from the client 
} 

クライアント例:I疲れすでに(それが唯一のクラスの名前を変換すると同じように、自然に失敗した)何

var cont = new MyDevice(); 

HttpResponseMessage rb = await client.PostAsync(@"http://localhost:34326/Api/Updater", cont); 

var a1= new MyDevice("MyTestDevice", "a"); 
var cont = new StringContent(a1.ToString(), Encoding.UTF8, "application/json"); 

MYDEVICEは、次のようなレイアウトになっています。

public class MyDevice 
{ 
    private EnumClient _Client; 
    private string _Office; 
    private string _DeviceNumber;  
    private List<InstalledProgram> _InstalledPrograms; 


    public List<InstalledProgram> InstalledPrograms{ get => _InstalledPrograms; set => _InstalledPrograms= value; } 
    public string DeviceNumber { get => _DeviceNumber; set => _DeviceNumber = value; } 
    public EnumClient Client { get => _Client; set => _Client = value; } 
    public string Office { get => _Office; set => _Office = value; } 

} 

InstalledProgramsはいくつかのプロパティ(文字列名、文字列バージョン)を持っています。

答えて

0

問題は、あなたのクラスをシリアライズしてStringContentとして送信する方法です。 ToStringメソッドを使用する代わりに、json文字列としてシリアル化する必要があります。以下のコードは、Newtonsoft.Jsonのnugetパッケージを使用しています。

var cont = new StringContent(JsonConvert.SerializeObject(a1), Encoding.UTF8, "application/json"); 
+0

newtonsoft.jsonのような拡張子を使用することは、ほぼ必須ですか? – Thomas

+0

あなたは独自のjsonシリアライザを動かすことができますが、Newtonsoftのような利用可能なライブラリではそうするのは意味がありません。 – dharms

関連する問題