1

私はそれがのように見える1つのモデルを持っています

public class DataClass
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string ContactNo { get; set; }
}

以下のコードを使用してJsonリクエストで変換しようとしました。

var l=new List<Data>();
l.Add(new Data(){Name="foo",Address ="bar",ContactNo =123});
l.Add(new Data(){Name="biz",Address ="baz"});
string json=JsonConvert.SerializeObject(l);

それは私に次のような文字列を与えるでしょう

 [{"Name":"foo","Address":"bar","ContactNo":"123"},{"Name":"biz","Address":"baz","ContactNo":""}]

出力2番目の ContactNo には空の文字列がありますが、値がないまたは NULL のフィールドは必要ありません。JsonリクエストからNULLまたは空のフィールドを回避する最良の方法は何ですか? 前もって感謝します。

4

3 に答える 3

1

Json.Netを使用していると思います。

System.ComponentModel.DefaultValueAttribute を使用できます。これにより、null とは異なる既定値を使用するようにプロパティをマークできます。

したがって、JSON 出力で空の文字列を無視したい場合は、モデル クラスを次のように更新できます。

public class DataClass
{
    [DefaultValue("")]
    public string Name { get; set; }
    [DefaultValue("")]
    public string Address { get; set; }
    [DefaultValue("")]
    public string ContactNo { get; set; }
}

これを取得するには、SerializerSettings.DefaultValueHandling を Ignore または IgnoreAndPopulate に設定する必要があることに注意してください。

シリアル化された json サイズを削減するためのさまざまなアプローチのより完全な例は、次のとおりです。

http://james.newtonking.com/archive/2009/10/23/effective-json-with-json-net-reducing-serialized-json-size

于 2016-02-17T11:17:10.510 に答える
1

以下のようにモデルを変更します

public class Data
{
    public string Name { get; set; }
    public string Address { get; set; }
    public int? ContactNo { get; set; }
}

次に、以下のようにオブジェクトをシリアル化します

var result = JsonConvert.SerializeObject(
             l, 
             new JsonSerializerSettings() 
             { 
                 NullValueHandling = NullValueHandling.Ignore 
             });
于 2013-09-01T16:55:47.617 に答える
0

1. モデル クラスにフラグを追加できます。

public class DataClass{
public bool isIllegal{get;set;}
public string Name { get; set; }
public string Address { get; set; }
public string ContactNo { get; set{isIllegal=!string.isNullOrEmpty(value);)}
}

2.JsonConvert.SerializeObject(l)以降にisIllegalがfalseのデータをフィルタリングできます。

于 2013-09-02T00:23:19.707 に答える