2013-09-01 3 views
1

У меня есть одна модель это выглядетьКак фильтровать нулевое или пустое значение из строки Json

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":""}] 

на выходе второго ContactNo имеет пустую строку, но мне не нужно поле, которое не имеет никакого значения или NULL. может ли кто-нибудь рассказать мне, что является лучшим способом избежать поля NULL или Empty из запроса Json? Спасибо заранее.

+0

а) Что такое 'Data'? b) 'ContactNo' не может быть пустой (или« 123 »), так как это« целое » – I4V

ответ

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 
      }); 
+0

Это не пустое, это пустая строка ... – I4V

+0

Спасибо за ваш быстрый ответ, но когда я попробовал строку messageToSend = JsonConvert. SerializeObject (api, converter, new JsonSerializerSettings() {NullValueHandling = NullValueHandling.Ignore}); он даст мне ошибку, как Аргумент 3: не может конвертировать из «Newtonsoft.Json.JsonSerializerSettings» в «Newtonsoft.Json.JsonConverter» –

+0

. Проходите три аргумента, пожалуйста, снова проверьте мой ответ. –

0

1.You может добавить флаг в классе модели.

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.You может фильтровать данные которого isIllegal является ложным после JsonConvert.SerializeObject (л).

+1

Вы имеете в виду, что я должен проверять каждое свойство с isIllegal? это не является правильным решением, если у меня есть 25 свойств в модели. –

0

Предполагается, что вы используете 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 должен быть установлен в игнор или IgnoreAndPopulate для это нужно подобрать.

Более тщательный пример различных подходов к снижению сериализованного размера JSon здесь:

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

+0

Примечание: Я немного неопределен, если вы предполагали, что ContactNo является int вместо строки. Принятый ответ - это int, но вопрос редактируется. Я предполагаю, что это релевантный ответ, поскольку в вопросе конкретно задается пустая строка. – PMBjornerud

+0

Спасибо, мужчина, но это было задано в 2013 году –

+0

Я знаю;) Но я изначально приехал сюда из Google, ища ответ.Поскольку другие с тем же вопросом могут закончиться здесь, я вернулся, чтобы добавить ответ после того, как я решил свою проблему. – PMBjornerud

Смежные вопросы