人生在世,一切都是机缘,顺其自然,内心就会逐渐清朗,生活,也是一首陪伴一生的乐曲。有时它激昂高亢,有时它曲折婉转,有时它忧郁沉闷。生活是快乐的,还是令人难以接受的,这取决于自己的心态。
DeserializeDemo.aspx内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DeserializeDemo.aspx.cs" Inherits="NewtonsoftDemo.DeserializeDemo" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:Button ID="btnDeserializeAnObject" runat="server" Text="反序列化一个对象" OnClick="btnDeserializeAnObject_Click" />
</td>
<td>
<asp:Button ID="btnDeserializeACollection" runat="server" Text="反序列化一个集合" OnClick="btnDeserializeACollection_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnDeserializeADictionary" runat="server" Text="反序列化一个字典" OnClick="btnDeserializeADictionary_Click" />
</td>
<td>
<asp:Button ID="btnDeserializeAnAnonymousType" runat="server" Text="反序列化一个匿名类型" OnClick="btnDeserializeAnAnonymousType_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnDeserializeADataSet" runat="server" Text="反序列化一个DataSet" OnClick="btnDeserializeADataSet_Click" />
</td>
<td>
<asp:Button ID="btnWithCustomCreationConverter" runat="server" Text="用CustomCreationConverter反序列化" OnClick="btnWithCustomCreationConverter_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnDeserializeJSONFromAfile" runat="server" Text="从文件反序列化JSON" OnClick="btnDeserializeJSONFromAfile_Click" />
</td>
<td>
<asp:Button ID="btnPopulateAnObject" runat="server" Text="填充对象" OnClick="btnPopulateAnObject_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnConstructorHandlingSetting" runat="server" Text="ConstructorHandling设置" OnClick="btnConstructorHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnObjectCreationHandlingSettin" runat="server" Text="ObjectCreationHandling设置" OnClick="btnObjectCreationHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnDefaultValueHandlingSetting" runat="server" Text="DefaultValueHandling设置" OnClick="btnDefaultValueHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnMissingMemberHandlingSetting" runat="server" Text="MissingMemberHandling设置" OnClick="btnMissingMemberHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnNullValueHandlingSetting" runat="server" Text="NullValueHandling设置" OnClick="btnNullValueHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnReferenceLoopHandlingSetting" runat="server" Text="ReferenceLoopHandling设置" OnClick="btnReferenceLoopHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnPreserveReferencesHandlingSetting" runat="server" Text="PreserveReferencesHandling设置" OnClick="btnPreserveReferencesHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnDateFormatHandlingSetting" runat="server" Text="DateFormatHandling设置" OnClick="btnDateFormatHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnDateTimeZoneHandlingSetting" runat="server" Text="DateTimeZoneHandling设置" OnClick="btnDateTimeZoneHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnTypeNameHandlingSetting" runat="server" Text="TypeNameHandling设置" OnClick="btnTypeNameHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnMetadataPropertyHandlingSetting" runat="server" Text="MetadataPropertyHandling设置" OnClick="btnMetadataPropertyHandlingSetting_Click" />
</td>
<td>
<asp:Button ID="btnContractResolverSetting" runat="server" Text="ContractResolver设置" OnClick="btnContractResolverSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnTraceWriterSetting" runat="server" Text="TraceWriter设置" OnClick="btnTraceWriterSetting_Click" />
</td>
<td>
<asp:Button ID="btnErrorHandlingSetting" runat="server" Text="ErrorHandling设置" OnClick="btnErrorHandlingSetting_Click" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnMaxDepthSetting" runat="server" Text="MaxDepth设置" OnClick="btnMaxDepthSetting_Click" />
</td>
<td>
<br />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
DeserializeDemo.aspx.cs代码:
public partial class DeserializeDemo : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
}
protected void btnDeserializeAnObject_Click(object sender,EventArgs e)
{
string json = @"{ 'Email': 'james@example.com','Active': true,'CreatedDate': '2013-01-20T00:00:00Z','Roles': [ 'User','Admin' ] }";
Account account = JsonConvert.DeserializeObject<Account>(json);
Response.Write(account.Email);
}
protected void btnDeserializeADictionary_Click(object sender,EventArgs e)
{
string json = @"{ 'href': '/account/login.aspx','target': '_blank' }";
Dictionary<string,string> htmlAttributes = JsonConvert.DeserializeObject<Dictionary<string,string>>(json);
Response.Write(htmlAttributes["href"]);
Response.Write(htmlAttributes["target"]);
}
protected void btnDeserializeACollection_Click(object sender,EventArgs e)
{
string json = @"['Starcraft','Halo','Legend of Zelda']";
List<string> videogames = JsonConvert.DeserializeObject<List<string>>(json);
Response.Write(string.Join(",",videogames.ToArray()));
}
protected void btnSerializeAnObject_Click(object sender,EventArgs e)
{
}
protected void btnDeserializeAnAnonymousType_Click(object sender,EventArgs e)
{
var definition = new {Name = ""};
string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1,definition);
Response.Write(customer1.Name);
string json2 = @"{'Name':'Mike'}";
var customer2 = JsonConvert.DeserializeAnonymousType(json2,definition);
Response.Write(customer2.Name);
}
protected void btnDeserializeADataSet_Click(object sender,EventArgs e)
{
string json = @"{ 'Table1': [ { 'id': 0,'item': 'item 0' },{ 'id': 1,'item': 'item 1' } ] }";
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
DataTable dataTable = dataSet.Tables["Table1"];
Response.Write(dataTable.Rows.Count);
foreach (DataRow row in dataTable.Rows)
{
Response.Write(row["id"] + " - " + row["item"]);
}
}
protected void btnWithCustomCreationConverter_Click(object sender,EventArgs e)
{
string json = @"{ 'Department': 'Furniture','JobTitle': 'Carpenter','FirstName': 'John','LastName': 'Joinery','BirthDate': '1983-02-02T00:00:00' }";
PersonModel person = JsonConvert.DeserializeObject<PersonModel>(json,new PersonConverter());
Response.Write(person.GetType().Name);
EmployeeModel employee = (EmployeeModel) person;
Response.Write("<br />" + employee.JobTitle);
}
protected void btnDeserializeJSONFromAfile_Click(object sender,EventArgs e)
{
Movie movie1 = JsonConvert.DeserializeObject<Movie>(File.ReadAllText(@"c:\movie.json"));
using (StreamReader file = File.OpenText(@"c:\movie.json"))
{
JsonSerializer serializer = new JsonSerializer();
Movie movie2 = (Movie) serializer.Deserialize(file,typeof (Movie));
}
}
protected void btnPopulateAnObject_Click(object sender,EventArgs e)
{
Account account = new Account
{
Email = "james@example.com",Active = true,CreatedDate = new DateTime(2013,1,20,0,DateTimeKind.Utc),Roles = new List<string>
{
"User","Admin"
}
};
string json = @"{ 'Active': false,'Roles': [ 'Expired' ] }";
JsonConvert.PopulateObject(json,account);
Response.Write(account.Email);
Response.Write(account.Active);
Response.Write(string.Join(",account.Roles.ToArray()));
}
protected void btnConstructorHandlingSetting_Click(object sender,EventArgs e)
{
string json = @"{'Url':'http://www.google.com'}";
try
{
JsonConvert.DeserializeObject<Website>(json);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
Website website = JsonConvert.DeserializeObject<Website>(json,new JsonSerializerSettings
{
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
});
Response.Write(website.Url);
}
protected void btnObjectCreationHandlingSetting_Click(object sender,EventArgs e)
{
string json = @"{ 'Name': 'James','Offices': [ 'Auckland','Wellington','Christchurch' ] }";
Userviewmodel model1 = JsonConvert.DeserializeObject<Userviewmodel>(json);
foreach (string office in model1.Offices)
{
Response.Write(office + "<br />");
}
Userviewmodel model2 = JsonConvert.DeserializeObject<Userviewmodel>(json,new JsonSerializerSettings
{
ObjectCreationHandling = ObjectCreationHandling.Replace
});
foreach (string office in model2.Offices)
{
Response.Write(office + "<br />");
}
}
protected void btnDefaultValueHandlingSetting_Click(object sender,EventArgs e)
{
Person person = new Person();
string jsonIncludeDefaultValues = JsonConvert.SerializeObject(person,Formatting.Indented);
Console.WriteLine(jsonIncludeDefaultValues);
string jsonIgnoreDefaultValues = JsonConvert.SerializeObject(person,Formatting.Indented,new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
Response.Write(jsonIgnoreDefaultValues);
}
protected void btnMissingMemberHandlingSetting_Click(object sender,EventArgs e)
{
string json = @"{ 'FullName': 'Dan Deleted','Deleted': true,'DeletedDate': '2013-01-20T00:00:00' }";
try
{
JsonConvert.DeserializeObject<Account>(json,new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error
});
}
catch (JsonSerializationException ex)
{
Response.Write(ex.Message);
}
}
protected void btnNullValueHandlingSetting_Click(object sender,EventArgs e)
{
Person person = new Person
{
Name = "Nigal Newborn",Age = 1
};
string jsonIncludeNullValues = JsonConvert.SerializeObject(person,Formatting.Indented);
Response.Write(jsonIncludeNullValues);
string jsonIgnoreNullValues = JsonConvert.SerializeObject(person,new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
Response.Write(jsonIgnoreNullValues);
}
protected void btnReferenceLoopHandlingSetting_Click(object sender,EventArgs e)
{
Employee joe = new Employee {Name = "Joe User"};
Employee mike = new Employee {Name = "Mike Manager"};
joe.Manager = mike;
mike.Manager = mike;
string json = JsonConvert.SerializeObject(joe,new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
Response.Write(json);
}
protected void btnDateFormatHandlingSetting_Click(object sender,EventArgs e)
{
DateTime mayanEndOfTheWorld = new DateTime(2012,12,21);
string jsonIsoDate = JsonConvert.SerializeObject(mayanEndOfTheWorld);
Response.Write(jsonIsoDate);
string jsonMsDate = JsonConvert.SerializeObject(mayanEndOfTheWorld,new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});
Response.Write(jsonMsDate);
}
protected void btnDateTimeZoneHandlingSetting_Click(object sender,EventArgs e)
{
Flight flight = new Flight
{
Destination = "Dubai",DepartureDate = new DateTime(2013,21,DateTimeKind.Unspecified),DepartureDateUtc = new DateTime(2013,DepartureDateLocal = new DateTime(2013,DateTimeKind.Local),Duration = TimeSpan.FromHours(5.5)
};
string jsonWithRoundtripTimeZone = JsonConvert.SerializeObject(flight,new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
});
Response.Write(jsonWithRoundtripTimeZone);
string jsonWithLocalTimeZone = JsonConvert.SerializeObject(flight,new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local
});
Response.Write(jsonWithLocalTimeZone);
string jsonWithUtcTimeZone = JsonConvert.SerializeObject(flight,new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
});
Response.Write(jsonWithUtcTimeZone);
string jsonWithUnspecifiedTimeZone = JsonConvert.SerializeObject(flight,new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Unspecified
});
Response.Write(jsonWithUnspecifiedTimeZone);
}
protected void btnTypeNameHandlingSetting_Click(object sender,EventArgs e)
{
Stockholder stockholder = new Stockholder
{
FullName = "Steve Stockholder",Businesses = new List<Business>
{
new Hotel
{
Name = "Hudson Hotel",Stars = 4
}
}
};
string jsonTypeNameAll = JsonConvert.SerializeObject(stockholder,new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
});
Response.Write(jsonTypeNameAll);
string jsonTypeNameAuto = JsonConvert.SerializeObject(stockholder,new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
Response.Write(jsonTypeNameAuto);
Stockholder newStockholder = JsonConvert.DeserializeObject<Stockholder>(jsonTypeNameAuto,new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
Response.Write(newStockholder.Businesses[0].GetType().Name);
}
protected void btnMetadataPropertyHandlingSetting_Click(object sender,'Password': 'Password1','$type': 'MyNamespace.User,MyAssembly' }";
object o = JsonConvert.DeserializeObject(json,new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
});
User u = (User) o;
Response.Write(u.Name);
}
protected void btnContractResolverSetting_Click(object sender,EventArgs e)
{
PersonM person = new PersonM
{
FirstName = "Sarah",LastName = "Security"
};
string json = JsonConvert.SerializeObject(person,new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
Response.Write(json);
}
protected void btnTraceWriterSetting_Click(object sender,'DeletedDate': '2013-01-20T00:00:00' }";
MemoryTraceWriter traceWriter = new MemoryTraceWriter();
Account account = JsonConvert.DeserializeObject<Account>(json,new JsonSerializerSettings
{
TraceWriter = traceWriter
});
Response.Write(traceWriter.ToString());
}
protected void btnErrorHandlingSetting_Click(object sender,EventArgs e)
{
List<string> errors = new List<string>();
List<DateTime> c = JsonConvert.DeserializeObject<List<DateTime>>(@"[ '2009-09-09T00:00:00Z','I am not a date and will error!',[ 1 ],'1977-02-20T00:00:00Z',null,'2000-12-01T00:00:00Z' ]",new JsonSerializerSettings
{
Error = delegate(object sd,Newtonsoft.Json.Serialization.ErrorEventArgs args)
{
errors.Add(args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
},Converters = {new IsoDateTimeConverter()}
});
}
protected void btnMaxDepthSetting_Click(object sender,EventArgs e)
{
string json = @"[ [ [ '1','Two','III' ] ] ]";
try
{
JsonConvert.DeserializeObject<List<IList<IList<string>>>>(json,new JsonSerializerSettings
{
MaxDepth = 2
});
}
catch (JsonReaderException ex)
{
Response.Write(ex.Message);
}
}
protected void btnPreserveReferencesHandlingSetting_Click(object sender,EventArgs e)
{
DirectoryModel root = new DirectoryModel {Name = "Root"};
DirectoryModel documents = new DirectoryModel {Name = "My Documents",Parent = root};
FileModel file = new FileModel {Name = "ImportantLegalDocument.docx",Parent = documents};
documents.Files = new List<FileModel> {file};
try
{
JsonConvert.SerializeObject(documents,Formatting.Indented);
}
catch (JsonSerializationException)
{
}
string preserveReferenacesAll = JsonConvert.SerializeObject(documents,new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All
});
Response.Write(preserveReferenacesAll);
string preserveReferenacesObjects = JsonConvert.SerializeObject(documents,new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
Response.Write(preserveReferenacesObjects);
}
}
#region CustomCreationConverter
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
}
public class EmployeeModel : PersonModel
{
public string Department { get; set; }
public string JobTitle { get; set; }
}
public class PersonConverter : CustomCreationConverter<PersonModel>
{
public override PersonModel Create(Type objectType)
{
return new EmployeeModel();
}
}
#endregion
#region ObjectCreationHandlingSetting所需要的实体类
public class Userviewmodel
{
public string Name { get; set; }
public IList<string> Offices { get; private set; }
public Userviewmodel()
{
Offices = new List<string>
{
"Auckland","Wellington","Christchurch"
};
}
}
#endregion
#region TypeNameHandling所需要的实体类
public abstract class Business
{
public string Name { get; set; }
}
public class Hotel : Business
{
public int Stars { get; set; }
}
public class Stockholder
{
public string FullName { get; set; }
public IList<Business> Businesses { get; set; }
}
#endregion
#region ContractResolver所需要的实体类
public class PersonM
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName
{
get { return FirstName + " " + LastName; }
}
}
#endregion
#region TraceWriterSetting所需要的实体类
public class AccountModel
{
public string FullName { get; set; }
public bool Deleted { get; set; }
}
#endregion
#region PreserveReferencesHandlingSetting所需要的实体类
public class DirectoryModel
{
public string Name { get; set; }
public DirectoryModel Parent { get; set; }
public IList<FileModel> Files { get; set; }
}
public class FileModel
{
public string Name { get; set; }
public DirectoryModel Parent { get; set; }
}
#endregion
运行结果如图:
@H_
403_1911@
原文链接:https://www.f2er.com/json/289167.html