JSON.NET имеет хороший способ позволить вам помечать свойства как ненужные - вы можете использовать DataContract
и DataMember
атрибуты.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace ConsoleApplication1
{
[DataContract]
public class NamedIndividual
{
#region Fields
private string firstName;
private string middleInitial;
private string lastName;
#endregion
#region Properties
[DataMember(IsRequired = true)]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
[DataMember(IsRequired = false)]
public string MiddleInitial
{
get { return middleInitial; }
set { middleInitial = value; }
}
[DataMember(IsRequired = true)]
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
#endregion
public NamedIndividual()
{
}
}
class Program
{
static void Main(string[] args)
{
string name = "{'FirstName':'David', 'MiddleInitial':'Q', 'LastName':'Hoerster'}";
string name1 = "{'FirstName':'David', 'LastName':'Hoerster'}";
var obj = JsonConvert.DeserializeObject<NamedIndividual>(name);
var obj1 = JsonConvert.DeserializeObject<NamedIndividual>(name1);
Console.WriteLine(obj.MiddleInitial);
Console.WriteLine("{0} {1} {2}",obj1.FirstName, obj1.MiddleInitial, obj1.LastName);
}
}
}
Итак, я отмечаю MiddleInitial
как необязательное свойство - чтобы моя строка JSON могла содержать его или нет. Если я помечу свойство как обязательное (IsRequired=true
), то в моей строке JSON будет лучше свойство, или будет сгенерировано исключение.
ОБНОВЛЕНИЕ Я мог подразумевать, что вам нужно использовать атрибуты DataContract
, чтобы сделать некоторые свойства ненужными или нет. JSON.net также имеет свой собственный набор атрибутов, и наряду с комментарием @ L.B. ниже, использование каких-либо атрибутов обеспечивает поведение по умолчанию, в котором ничего не требуется. Вот краткий пример использования атрибутов JsonObject
:
[JsonObject(MemberSerialization=MemberSerialization.OptIn)]
public class NamedIndividual1
{
[JsonProperty(Required = Required.Always)]
public string FirstName { get; set; }
[JsonProperty(Required = Required.Default)]
public string MiddleInitial { get; set; }
[JsonProperty(Required = Required.Always)]
public string LastName { get; set; }
}
class Program
{
static void Main(string[] args)
{
string name2 = "{'FirstName':'David', 'LastName':'Hoerster'}";
var obj2 = JsonConvert.DeserializeObject<NamedIndividual>(name2);
Console.WriteLine("{0} {1} {2}", obj2.FirstName, obj2.MiddleInitial, obj2.LastName);
}
}
(Я также не мог использовать какие-либо атрибуты, чтобы все было необязательным.)
Надеюсь, это поможет!