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也有它們自己的一組屬性,並且在下面@B.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 2012-01-10 18:59:10
當然。更改已添加 – MrM 2012-01-10 19:01:56
在你的空構造函數內你可以重載或設置你正在尋找的屬性..否則從它的外觀..它看起來像所有3個屬性將設置..這是否有意義 – MethodMan 2012-01-10 19:08:05