Hi,
The simplest way can be mark the Employees property of the Job class with the
[Newtonsoft.Json.JsonIgnore]
attribute.
Example
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<%@ Import Namespace="Newtonsoft.Json" %>
<script runat="server">
class Employee
{
public string Name { get; set; }
}
class Job
{
public string Name { get; set; }
[JsonIgnore]
public List<Employee> Employees { get; set; }
}
class Company
{
public string Name { get; set; }
public List<Job> Jobs { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
Employee employee1 = new Employee() { Name = "Employee 1" };
Employee employee2 = new Employee() { Name = "Employee 2" };
Job job1 = new Job()
{
Name = "Job 1",
Employees = new List<Employee>() { employee1, employee2 }
};
Job job2 = new Job()
{
Name = "Job 2",
Employees = new List<Employee>() { employee1, employee2 }
};
Company company = new Company()
{
Name = "Company 1",
Jobs = new List<Job>() { job1, job2 }
};
X.Msg.Alert("Company", JSON.Serialize(company)).Show();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Ext.NET Example</title>
</head>
<body>
<ext:ResourceManager runat="server" />
</body>
</html>
But it's not an option if you will need to serialize the Job class including the Employees property.
If so, the single way is implementing your own Newtonsoft.Json.JsonConverter.
The following example should help you to start.
Example
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<%@ Import Namespace="Newtonsoft.Json" %>
<script runat="server">
class Employee
{
public string Name { get; set; }
}
class Job
{
public string Name { get; set; }
public List<Employee> Employees { get; set; }
}
class Company
{
public string Name { get; set; }
public List<Job> Jobs { get; set; }
}
class CompanyJsonConverter : Newtonsoft.Json.JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Company company = value as Company;
// you should implement your custom logic here
writer.WriteRawValue(JSON.Serialize(company));
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return typeof(Company).IsAssignableFrom(objectType);
}
}
protected void Page_Load(object sender, EventArgs e)
{
Employee employee1 = new Employee() { Name = "Employee 1" };
Employee employee2 = new Employee() { Name = "Employee 2" };
Job job1 = new Job()
{
Name = "Job 1",
Employees = new List<Employee>() { employee1, employee2 }
};
Job job2 = new Job()
{
Name = "Job 2",
Employees = new List<Employee>() { employee1, employee2 }
};
Company company = new Company()
{
Name = "Company 1",
Jobs = new List<Job>() { job1, job2 }
};
X.Msg.Alert("Company", JSON.Serialize(company, new List<JsonConverter>() { new CompanyJsonConverter() })).Show();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Ext.NET Example</title>
</head>
<body>
<ext:ResourceManager runat="server" />
</body>
</html>
There is a lot of custom implementations of JsonConverter in Ext.NET:
<Ext.Net sources root>\Ext.Net\Utility\JsonConverters\...