私はjson.netの初心者です。Json.netは子オブジェクトのヌル値を無視します
私はUnity3dエンジンでそれを統合する必要があるので、私はnet 2.0バージョンのjson.netを使用しています答えは(nullvaluehandlingを使用して)ちょうど動作しません!私はこれを最も古いバージョンの復元と見なすべきですか?
ので、このようなオブジェクトを持っている:
Object()
{
ChildObject ChildObject1;
ChildObject ChildObject2;
}
ChildObject()
{
Property1;
Property2;
}
私は子供がオブジェクトを含め、すべてのオブジェクトの唯一のnullでないプロパティシリアライズするjson.netをしたいです。だから私はChildObject1のプロパティ1とChildObject2のproperty2のみをinstatiate場合、JsonConvertから文字列は次のようになります。
{
"ChildObject1":
{
"Property1": "10"
},
"ChildObject1":
{
"Property2":"20"
}
}
しかし、デフォルトの動作は、このような文字列を作成します。
{
"ChildObject1":
{
"Property1": "10",
"Property2": "null"
},
"ChildObject2":
{
"Property1": "null,
"Property2":"20"
}
}
私がNullValueHandlingについて知っています、それは私の場合には正しく働いていません!親オブジェクト(直列化しているオブジェクト)のnullプロパティだけを無視しますが、この親オブジェクトにいくつかの子がある場合、この子オブジェクトのnullプロパティは無視されません。私の状況は異なります。
子オブジェクトの1つのプロパティーもnullでない場合は、1つのnull以外のプロパティーとnullの文字列にシリアル化します。私のコードの
UPD例:
私が入れ子になったクラス
私のオブジェクトは、このようなものです:
public class SendedMessage
{
public List<Answer> Answers { get; set; }
public AnswerItem Etalon {get; set;}
}
public class Answer()
{
public AnswerItem Item { get; set; }
}
public class AnswerItem()
{
public string ID { get; set; }
public bool Result { get; set; }
public int Number { get; set; }
}
は、私はこのようなSendedMessageオブジェクトをinstatiate: new SendedMessage x;
x.Etalon = new AnswerItem();
x.Etalon.Result = true;
私は
string ignored = JsonConvert.SerializeObject(x,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
使用して、それは、この文字列を作るより:
{ "エタロン":{ "ID" = "ヌル"、 "結果" = "false" を、数」= "ヌル"} }
本当にnullオブジェクトAnswers(List)は無視されますが、子オブジェクトのnullプロパティは無視されません。
ありがとうございました!
可能性のある重複した[nullの場合json.netを使用して、クラス内のプロパティを無視する方法](のhttp:// stackoverflowの.com/questions/6507889/how-to-ignore-a-property-in-null-use-json-net) – JeetDaloneboy
これを参照してください:http:// stackoverflow。com/questions/33027409/json-net-serialize-jobject-null-propertiesを無視している間 – JeetDaloneboy
まあ、別の状況です。 NullvalueHandling.Ignore **直列化されたオブジェクトの子オブジェクト**のnullプロパティを無視しません。 – Rodoleia