2017-03-16 9 views
3

クラスにJSON APIレスポンスをデシリアライズしていますが、コード実行後にクラスが空である、つまりデシリアライズされていないようです。ここでDeserialisedクラスが空白です - JSON C#

はresponsetextと呼ばれる、JSONの例である:

{"ON":{"Date":"3/16/2017 10:12:51 AM","PARAM1":"84","PARAM2":"31597.535"},"OFF":{"Date":"3/16/2017 9:05:53 AM","PARAM3":"0","PARAM4":"0"}} 

私は2つのクラスがあります。

public class ON 
{ 
public Date {get; set;} 
public string PARAM1 {get; set;} 
public string PARAM2 {get; set;} 
} 
public class OFF 
{ 
public Date {get; set;} 
public string PARAM3 {get; set;} 
public string PARAM4 {get; set;} 
} 

そして、私はここにdeserialise:

ON class1 = JsonConvert.DeserializeObject<ON>(responsetext); 
OFF class2 = JsonConvert.DeserializeObject<OFF>(responsetext); 

しかし、クラスがあります空の。私は間違って何をしていますか?

+0

に応答をdeserialise、プログラムがためにJSONクラスを書いてみましょうする方が簡単な場合があり、その後JSONオブジェクト

public class ONOFF { public ON ON { get; set; } public OFF OFF { get; set; } } 

に一致するONOFFクラスを作成し、君は。 [JSON2C#](http://json2csharp.com) – vipersassassin

答えて

10

同じJSONを2つの異なるクラスにデシリアライズしようとしています。デシリアライザが、使用するJSONの部分を魔法のように知っているかのようです。あなたはラップクラスが必要になります。その後、

public class Message 
{ 
    public ON ON { get; set; } 

    public OFF OFF { get; set; } 
} 

そして、このようdeserialise:

var message = JsonConvert.DeserializeObject<Message>(responsetext); 

今、あなたはmessage.ONmessage.OFFの両方にアクセスすることができます。

screenshot of running example

+0

ありがとう@Stijn - そしてそれをどのように参照するのですか?デシリアライズするコードに変更するには何が必要ですか? すなわち'ON class1 = JsonConvert.DeserializeObject (responsetext);' – reviloSlater

+0

@reviloSlater更新された回答を参照してください。 – Stijn

+0

@reviloSlaterまた、あなたの実際のコードは 'public DateTime Date {get; set ;;} 'publicの代わりに' Date {get;セット;} '?後者はコンパイルされないので。 – Stijn

1

あなたの応答を持っている何OnまたはOffの単一インスタンスではなく、それぞれのインスタンスの1つを含むオブジェクトです。このラッパーを一方または他方のクラスにデシリアライズするようにJsonConvertに指示すると、クラスのコピーがインスタンス化され、設定するプロパティのJSON文字列が表示されますが、含まれているオブジェクトがOnでもオフのいずれかのフィールドを持っていません。だから、空のオブジェクトを返すだけです。

ONインスタンスとOFFインスタンスを含む第3のクラスが必要で、そのタイプにデシリアライズします。あなたが望む結果が得られます。あるいは、各オブジェクトのJSONを別々の文字列に抽出してデシリアライズすることもできます(ただし、最初はNewtonsoft.JSONを使用する目的を破るようなものです)。

0

デシリアライズしようとしているJsonオブジェクトのONとOFFは、オブジェクトのプロパティです。

今後の取り組みについてその

ONOFF class3 = JsonConvert.DeserializeObject<ONOFF>(responsetext);