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 будет лучше иметь свойство или исключение будет выбрано.
UPDATE Возможно, я предположил, что вам необходимо использовать атрибуты 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);
}
}
(я также не мог использовать любые атрибуты для всего, чтобы быть необязательными.)
Надеется, что это помогает!
вы можете вставить как NamedIndividual объявлен. – MethodMan
уверен. Изменения были добавлены – MrM
внутри вашего пустого конструктора вы можете просто перегрузить это или установить свойства, которые вы ищете там. В противном случае от внешнего вида. Похоже, все 3 свойства будут установлены .. это имеет смысл – MethodMan