2016-08-10 18 views
1

Serializationプロパティを使用して、データを一時的に文字列に格納しようとしています。私は多くのメソッドをテストしました。それらの関数は私が使うことができるものです(実際のクラスではObjectIdがあるので、多くのシリアライゼーションクラスは動作しません)。逆シリアル化されたオブジェクトがnullになるのはなぜですか?

しかし、それは動作しません。簡単なテストで、私の直列化復元がnull:

public class MyClass 
{ 
    public string test = "bob"; 
} 

static public void function() 
{ 
    MyClass test = new MyClass(); 

    string data = Newtonsoft.Json.JsonConvert.SerializeObject(test); 
    object testb = Newtonsoft.Json.JsonConvert.DeserializeObject(data); 
    MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject(data) as MyClass; 
} 

結果は(debugger)です:

datab : { "test": "bob"} 
testa is null. 

なぜ?どのように私は正しいタイプにキーと値でtestbのようなオブジェクトを変換することができますか?

答えて

2

問題は、型キャストされている方法です。

はこの1つを試してみて、それはすべてのものでなければならないだけで結構

MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data); 

を動作するはずです。

1

は、一般的なデシリアライズメソッドを使用します。

MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data); 
1

あなたは公共のゲッターとセッターを使用してクラスを定義する必要があります。

public class MyData 
{ 
    public string Name {get; set;} 
} 

その後、クラスのインスタンスを作成し、それをシリアル化:

var data = new MyData() { Name = "bob" }; 

var serialized = JsonConvert.SerializeObject(data); 
Console.WriteLine(serialized); 

あなたはデシリアライズするときは、DeserializeObject<T>にを使用することができますどのタイプを逆シリアル化するかをJSON.NETに指示してください:

var deserialized = JsonConvert.DeserializeObject<MyData>(serialized); 
Console.WriteLine(deserialized.Name); 

ライブfi ddle:https://dotnetfiddle.net/w4B1IK

関連する問題