json.net manual serialization performance
up vote
0
down vote
favorite
I have a large data set that I'm trying to serialize that is about 15MB
. I wanted to increase performance so I tried to manually serialize it. I was expecting some performance boost but it actually takes the same amount of time as the built in serializer
that uses reflection
. Currently it takes around ~7 minutes to serialize the data. Maybe I'm doing something wrong, maybe someone can point it out and maybe there is something else I can do to for a performance boost while serializing
the data.
To begin with here is what my controller method looks like
public void GetGanttDataByUserOrganization()
{
//takes around 5 seconds to get the DTO
var ganttChartDto = _ganttChartService.GetInitialGanttData();
//takes around 7 minutes to manually serialize the DTO it's 15MB
var st = ganttChartDto.ToGanttJson();
HttpContext.Response.WriteJson(st);
}
This part is long it's the ToGanttJson()
extension method.
public static string ToGanttJson(this IEnumerable<ProductLineDto> p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pLine in p)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(pLine.Name);
writer.WritePropertyName("productLineId");
writer.WriteValue(pLine.ProductLineId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pLine.SortOrder);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pType in pLine.ProjectType)
{
writer = WriteProjectTypeDto(writer, pType);
}
writer.WriteEndArray();
writer.WriteEndObject();
}
writer.WriteEndArray();
return sw.ToString();
}
private static JsonTextWriter WriteProjectDto(JsonTextWriter writer, ProjectDto pjects)
{
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(pjects.ProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(pjects.ProjectName);
writer.WritePropertyName("parent");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(pjects.StartDate);
writer.WritePropertyName("projectStatus");
writer.WriteValue(pjects.ProjectStatus);
writer.WritePropertyName("projectTypeRowId");
writer.WriteValue(pjects.ProjectTypeRowId);
writer.WritePropertyName("projectTypeDescription");
writer.WriteValue(pjects.ProjectTypeDescription);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pjects.SortOrder);
writer.WritePropertyName("projectStatusId");
writer.WriteValue(pjects.ProjectStatusId);
writer.WritePropertyName("productLineId");
writer.WriteValue(pjects.ProductLineId);
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pjects.ProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(pjects.OrganizationId);
writer.WritePropertyName("clientId");
writer.WriteValue(pjects.ClientId);
writer.WritePropertyName("program");
writer.WriteValue(pjects.Program);
writer.WritePropertyName("productLineName");
writer.WriteValue(pjects.ProductLineName);
writer.WritePropertyName("isShotgun");
writer.WriteValue(pjects.IsShotgun);
writer.WritePropertyName("shotgunLink");
writer.WriteValue(pjects.ShotgunLink);
writer.WritePropertyName("budgetCode");
writer.WriteValue(pjects.BudgetCode);
writer.WritePropertyName("modelType");
writer.WriteValue(pjects.ModelType);
writer.WritePropertyName("modelYear");
writer.WriteValue(pjects.ModelYear);
writer.WritePropertyName("flow");
writer.WriteValue(pjects.Flow);
writer.WritePropertyName("description");
writer.WriteValue(pjects.Description);
writer = WriteOrganizationDto(writer, pjects.Organization);
writer.WritePropertyName("projectPersons");
writer.WriteStartArray();
foreach (var person in pjects.ProjectPersons)
{
writer = WriteProjectPersonDto(writer, person);
}
writer.WriteEndArray();
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var sp in pjects.Children)
{
writer = WriteSubProjectDto(writer, sp);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteSubProjectDto(JsonTextWriter writer, SubProjectDto sp) {
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(sp.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(sp.SubProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(sp.ProjectName);
writer.WritePropertyName("parentId");
writer.WriteValue(sp.ParentId);
writer.WritePropertyName("subProjectTypeId");
writer.WriteValue(sp.SubProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(sp.OrganizationId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(sp.SortOrder);
writer.WritePropertyName("clientId");
writer.WriteValue(sp.ClientId);
writer.WritePropertyName("projectClientId");
writer.WriteValue(sp.ProjectClientId);
writer.WritePropertyName("subProjectParentClientId");
writer.WriteValue(sp.SubProjectParentClientId);
writer.WritePropertyName("parentSubProjectId");
writer.WriteValue(sp.ParentSubProjectId);
writer.WritePropertyName("isShotgun");
writer.WriteValue(sp.IsShotgun);
writer = WriteOrganizationDto(writer, sp.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var childSp in sp.Children)
{
writer = WriteSubProjectDto(writer, childSp);
}
writer.WriteEndArray();
writer.WritePropertyName("subProjectPersons");
writer.WriteStartArray();
foreach (var spp in sp.SubProjectPersons)
writer = WriteSubprojectPersonDto(writer, spp);
writer.WriteEndArray();
//activities
writer.WritePropertyName("activities");
writer.WriteStartArray();
foreach (var act in sp.Activities)
writer = WriteActivityDto(writer, act);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityDto(JsonTextWriter writer, ActivityDto act)
{
writer.WriteStartObject();
writer.WritePropertyName("acivityId");
writer.WriteValue(act.ActivityId);
writer.WritePropertyName("description");
writer.WriteValue(act.Description);
writer.WritePropertyName("activityName");
writer.WriteValue(act.Name);
writer.WritePropertyName("activityDateRange");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(act.StartDate);
writer.WritePropertyName("endDate");
writer.WriteValue(act.EndDate);
writer.WritePropertyName("duration");
writer.WriteValue(act.Duration);
writer.WritePropertyName("pctComplete");
writer.WriteValue(act.PctComplete);
writer.WritePropertyName("name");
writer.WriteValue(act.Name);
writer.WritePropertyName("projectId");
writer.WriteValue(act.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(act.SubProjectId);
writer.WritePropertyName("organizationId");
writer.WriteValue(act.OrganizationId);
writer.WritePropertyName("activityTypeId");
writer.WriteValue(act.ActivityTypeId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(act.SortOrder);
writer.WritePropertyName("parentClientId");
writer.WriteValue("");
writer.WritePropertyName("clientId");
writer.WriteValue("");
writer.WritePropertyName("projectName");
writer.WriteValue(act.ProjectName);
writer.WritePropertyName("plannedStart");
writer.WriteValue(act.PlannedStart);
writer.WritePropertyName("plannedEnd");
writer.WriteValue(act.PlannedEnd);
writer.WritePropertyName("laserProcessId");
writer.WriteValue(act.LaserProcessId);
writer.WritePropertyName("laserThicknessId");
writer.WriteValue(act.LaserThicknessId);
writer.WritePropertyName("materialId");
writer.WriteValue(act.MaterialId);
writer.WritePropertyName("millingMinimumRadiusId");
writer.WriteValue(act.MillingMinimumRadiusId);
writer.WritePropertyName("millingScallopHeightId");
writer.WriteValue(act.MillingScallopHeightId);
writer.WritePropertyName("modelCategoryId");
writer.WriteValue(act.ModelCategoryId);
writer.WritePropertyName("modelTypeId");
writer.WriteValue(act.ModelTypeId);
writer.WritePropertyName("rpfdmNozzleId");
writer.WriteValue(act.RpfdmNozzleId);
writer.WritePropertyName("rpfillTypeId");
writer.WriteValue(act.RpfillTypeId);
writer.WritePropertyName("varianceId");
writer.WriteValue(act.VarianceId);
writer.WritePropertyName("quantityId");
writer.WriteValue(act.QuantityId);
writer.WritePropertyName("specNotes");
writer.WriteValue(act.SpecNotes);
writer.WritePropertyName("parentActivityID");
writer.WriteValue(act.ParentActivityID);
writer.WritePropertyName("rpsparseId");
writer.WriteValue(act.RpsparseId);
writer = WriteOrganizationDto(writer, act.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach(var child in act.Children)
writer = WriteActivityDto(writer, child);
writer.WriteEndArray();
writer.WritePropertyName("activityPersons");
writer.WriteStartArray();
foreach (var actPerson in act.ActivityPersons)
writer = WriteActivityPersonDto(writer, actPerson);
writer.WriteEndArray();
writer.WritePropertyName("activityMachines");
writer.WriteStartArray();
foreach (var am in act.ActivityMachines)
writer = WriteActivitMachineDto(writer, am);
writer.WriteEndArray();
writer.WritePropertyName("customForm");
writer.WriteStartArray();
foreach (var cf in act.CustomForm)
writer = WirteActivityTypeCustomFormDto(writer, cf);
writer.WriteEndArray();
//activitytype
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityTypeDto(JsonTextWriter writer, ActivityTypeDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeId");
writer.WriteValue(at.ActivityTypeId);
writer.WritePropertyName("isMileStone");
writer.WriteValue(at.IsMileStone);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WritePropertyName("showInProject");
writer.WriteValue(at.ShowInProject);
writer.WritePropertyName("showInParent");
writer.WriteValue(at.ShowInParent);
writer.WritePropertyName("color");
writer.WriteValue(at.Color);
writer.WritePropertyName("pattern");
writer.WriteValue(at.Pattern);
writer.WritePropertyName("milestoneImage");
writer.WriteValue(at.MilestoneImage);
writer.WritePropertyName("activityCount");
writer.WriteValue(at.ActivityCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(at.ReplacedBy);
writer = WirteResourceTypeControlDto(writer, at.ResourceType);
writer.WritePropertyName("modelTypes");
writer.WriteStartArray();
foreach (var mt in at.ModelTypes)
writer = WirteGanttControlDto(writer, mt);
writer.WriteEndArray();
writer.WritePropertyName("activitySpecs");
writer.WriteStartArray();
foreach (var spec in at.ActivitySpecs)
writer = WirteActivityQuantityDto(writer, spec);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityQuantityDto(JsonTextWriter writer, ActivityQuantityDto spec)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(spec.ActivityQuantityID);
writer.WritePropertyName("description");
writer.WriteValue(spec.Description);
writer.WritePropertyName("activityTypeID");
writer.WriteValue(spec.ActivityTypeID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(spec.SortOrder);
//list
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeQuantityListDto(JsonTextWriter writer, ActivityTypeQuantityListDto value)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(value.ActivityTypeQuantityListID);
writer.WritePropertyName("description");
writer.WriteValue(value.Description);
writer.WritePropertyName("activityTypeQuantityID");
writer.WriteValue(value.ActivityTypeQuantityID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(value.SortOrder);
writer.WritePropertyName("isDefaultValue");
writer.WriteValue(value.IsDefaultValue);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteResourceTypeControlDto(JsonTextWriter writer, ResourceTypeControlDto at)
{
writer.WritePropertyName("resourceType");
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.Id);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteGanttControlDto(JsonTextWriter writer, GanttControlDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.ID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeCustomFormDto(JsonTextWriter writer, ActivityTypeCustomFormDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(at.activityQuantityID);
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(at.ActivityTypeQuantityListID);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivitMachineDto(JsonTextWriter writer, ActivityMachinesDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityMachineID");
writer.WriteValue(at.ActivityMachineID);
writer.WritePropertyName("activityID");
writer.WriteValue(at.ActivityID);
writer.WritePropertyName("effort");
writer.WriteValue(at.Effort);
writer.WritePropertyName("machineID");
writer.WriteValue(at.MachineID);
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WritePropertyName("machineType");
writer = WriteMachineTypeDto(writer, at.MachineType);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteMachineTypeDto(JsonTextWriter writer, MachineTypeDto at) {
writer.WriteStartObject();
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityPersonDto(JsonTextWriter writer, ActivityPersonDto ap) {
writer.WriteStartObject();
writer.WritePropertyName("activityPersonId");
writer.WriteValue(ap.ActivityPersonId);
writer.WritePropertyName("activityID");
writer.WriteValue(ap.ActivityID);
writer.WritePropertyName("resourceTypeID");
writer.WriteValue(ap.ResourceTypeID);
writer.WritePropertyName("personID");
writer.WriteValue(ap.PersonID);
writer.WritePropertyName("effort");
writer.WriteValue(ap.Effort);
writer.WritePropertyName("cost");
writer.WriteValue(ap.Cost);
writer.WritePropertyName("resourceType");
writer = WriteResourceTypeDto(writer, ap.ResourceType);
writer.WritePropertyName("person");
writer = WritePersonDto(writer, ap.Person);
//activitydto
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WritePersonDto(JsonTextWriter writer, PersonDto p)
{
writer.WriteStartObject();
writer.WritePropertyName("personId");
writer.WriteValue(p.PersonId);
writer.WritePropertyName("firstName");
writer.WriteValue(p.FirstName);
writer.WritePropertyName("lastName");
writer.WriteValue(p.LastName);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteResourceTypeDto(JsonTextWriter writer, ResourceTypeDto rt) {
writer.WriteStartObject();
writer.WritePropertyName("resourceTypeId");
writer.WriteValue(rt.ResourceTypeId);
writer.WritePropertyName("description");
writer.WriteValue(rt.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(rt.IsFlagged);
writer.WritePropertyName("resourceTypeCount");
writer.WriteValue(rt.ResourceTypeCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(rt.ReplacedBy);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteSubprojectPersonDto(JsonTextWriter writer, SubProjectPersonDto spp) {
writer.WriteStartObject();
writer.WritePropertyName("subProjectPersonId");
writer.WriteValue(spp.SubProjectPersonId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(spp.SubProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(spp.PersonId);
writer.WritePropertyName("subProjectPersonRoles");
writer.WriteStartArray();
foreach (var spr in spp.SubProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, spr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonDto(JsonTextWriter writer, ProjectPersonDto person)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonId");
writer.WriteValue(person.ProjectPersonId);
writer.WritePropertyName("projectId");
writer.WriteValue(person.ProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(person.PersonId);
writer.WritePropertyName("projectPersonRoles");
writer.WriteStartArray();
foreach (var ppr in person.ProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, ppr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonRoleDto(JsonTextWriter writer, ProjectPersonRoleDto ppr)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonRoleID");
writer.WriteValue(ppr.ProjectPersonRoleID);
writer.WritePropertyName("projectPersonID");
writer.WriteValue(ppr.ProjectPersonID);
writer.WritePropertyName("roleTypeID");
writer.WriteValue(ppr.RoleTypeID);
writer.WritePropertyName("description");
writer.WriteValue(ppr.Description);
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteOrganizationDto(JsonTextWriter writer, OrganizationDto org)
{
writer.WritePropertyName("organization");
if (org == null)
{
writer.WriteNull();
return writer;
}
writer.WriteStartObject();
writer.WritePropertyName("OrganizationId");
writer.WriteValue(org.OrganizationId);
writer.WritePropertyName("OrganizationName");
writer.WriteValue(org.OrganizationName);
writer.WritePropertyName("employees");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WritePropertyName("machines");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectTypeDto(JsonTextWriter writer, ProjectTypeDto pType) {
writer.WriteStartObject();
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pType.ProjectTypeId);
writer.WritePropertyName("description");
writer.WriteValue(pType.Description);
writer.WritePropertyName("rowId");
writer.WriteValue(pType.RowId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pType.SortOrder);
writer.WritePropertyName("projects");
writer.WriteStartArray();
foreach (var pjects in pType.Projects)
{
writer = WriteProjectDto(writer, pjects);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
Now this is what my current code looks like with the out of the box serializer that takes the same amount of time.
Here is the controller method.
public virtual BetterJsonResult GetGanttDataByUserOrganization()
{
var ganttChartDto = _ganttChartService.GetInitialGanttData();
return BetterJson(ganttChartDto);
}
This is what the BetterJson
which basically returns this
...
protected virtual void SerializeData(HttpResponseBase response)
{
if (ErrorMessages.Any())
{
Data = new
{
ErrorMessage = string.Join("n", ErrorMessages),
ErrorMessages = ErrorMessages.ToArray()
};
response.StatusCode = 400;
}
if (Data == null) return;
response.Write(Data.ToJson());
}
public static string ToJson<T>(this T obj, bool includeNull = true)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter { new StringEnumConverter() },
NullValueHandling = includeNull ? NullValueHandling.Include : NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return JsonConvert.SerializeObject(obj, settings);
}
c# json serialization json.net
add a comment |
up vote
0
down vote
favorite
I have a large data set that I'm trying to serialize that is about 15MB
. I wanted to increase performance so I tried to manually serialize it. I was expecting some performance boost but it actually takes the same amount of time as the built in serializer
that uses reflection
. Currently it takes around ~7 minutes to serialize the data. Maybe I'm doing something wrong, maybe someone can point it out and maybe there is something else I can do to for a performance boost while serializing
the data.
To begin with here is what my controller method looks like
public void GetGanttDataByUserOrganization()
{
//takes around 5 seconds to get the DTO
var ganttChartDto = _ganttChartService.GetInitialGanttData();
//takes around 7 minutes to manually serialize the DTO it's 15MB
var st = ganttChartDto.ToGanttJson();
HttpContext.Response.WriteJson(st);
}
This part is long it's the ToGanttJson()
extension method.
public static string ToGanttJson(this IEnumerable<ProductLineDto> p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pLine in p)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(pLine.Name);
writer.WritePropertyName("productLineId");
writer.WriteValue(pLine.ProductLineId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pLine.SortOrder);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pType in pLine.ProjectType)
{
writer = WriteProjectTypeDto(writer, pType);
}
writer.WriteEndArray();
writer.WriteEndObject();
}
writer.WriteEndArray();
return sw.ToString();
}
private static JsonTextWriter WriteProjectDto(JsonTextWriter writer, ProjectDto pjects)
{
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(pjects.ProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(pjects.ProjectName);
writer.WritePropertyName("parent");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(pjects.StartDate);
writer.WritePropertyName("projectStatus");
writer.WriteValue(pjects.ProjectStatus);
writer.WritePropertyName("projectTypeRowId");
writer.WriteValue(pjects.ProjectTypeRowId);
writer.WritePropertyName("projectTypeDescription");
writer.WriteValue(pjects.ProjectTypeDescription);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pjects.SortOrder);
writer.WritePropertyName("projectStatusId");
writer.WriteValue(pjects.ProjectStatusId);
writer.WritePropertyName("productLineId");
writer.WriteValue(pjects.ProductLineId);
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pjects.ProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(pjects.OrganizationId);
writer.WritePropertyName("clientId");
writer.WriteValue(pjects.ClientId);
writer.WritePropertyName("program");
writer.WriteValue(pjects.Program);
writer.WritePropertyName("productLineName");
writer.WriteValue(pjects.ProductLineName);
writer.WritePropertyName("isShotgun");
writer.WriteValue(pjects.IsShotgun);
writer.WritePropertyName("shotgunLink");
writer.WriteValue(pjects.ShotgunLink);
writer.WritePropertyName("budgetCode");
writer.WriteValue(pjects.BudgetCode);
writer.WritePropertyName("modelType");
writer.WriteValue(pjects.ModelType);
writer.WritePropertyName("modelYear");
writer.WriteValue(pjects.ModelYear);
writer.WritePropertyName("flow");
writer.WriteValue(pjects.Flow);
writer.WritePropertyName("description");
writer.WriteValue(pjects.Description);
writer = WriteOrganizationDto(writer, pjects.Organization);
writer.WritePropertyName("projectPersons");
writer.WriteStartArray();
foreach (var person in pjects.ProjectPersons)
{
writer = WriteProjectPersonDto(writer, person);
}
writer.WriteEndArray();
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var sp in pjects.Children)
{
writer = WriteSubProjectDto(writer, sp);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteSubProjectDto(JsonTextWriter writer, SubProjectDto sp) {
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(sp.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(sp.SubProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(sp.ProjectName);
writer.WritePropertyName("parentId");
writer.WriteValue(sp.ParentId);
writer.WritePropertyName("subProjectTypeId");
writer.WriteValue(sp.SubProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(sp.OrganizationId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(sp.SortOrder);
writer.WritePropertyName("clientId");
writer.WriteValue(sp.ClientId);
writer.WritePropertyName("projectClientId");
writer.WriteValue(sp.ProjectClientId);
writer.WritePropertyName("subProjectParentClientId");
writer.WriteValue(sp.SubProjectParentClientId);
writer.WritePropertyName("parentSubProjectId");
writer.WriteValue(sp.ParentSubProjectId);
writer.WritePropertyName("isShotgun");
writer.WriteValue(sp.IsShotgun);
writer = WriteOrganizationDto(writer, sp.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var childSp in sp.Children)
{
writer = WriteSubProjectDto(writer, childSp);
}
writer.WriteEndArray();
writer.WritePropertyName("subProjectPersons");
writer.WriteStartArray();
foreach (var spp in sp.SubProjectPersons)
writer = WriteSubprojectPersonDto(writer, spp);
writer.WriteEndArray();
//activities
writer.WritePropertyName("activities");
writer.WriteStartArray();
foreach (var act in sp.Activities)
writer = WriteActivityDto(writer, act);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityDto(JsonTextWriter writer, ActivityDto act)
{
writer.WriteStartObject();
writer.WritePropertyName("acivityId");
writer.WriteValue(act.ActivityId);
writer.WritePropertyName("description");
writer.WriteValue(act.Description);
writer.WritePropertyName("activityName");
writer.WriteValue(act.Name);
writer.WritePropertyName("activityDateRange");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(act.StartDate);
writer.WritePropertyName("endDate");
writer.WriteValue(act.EndDate);
writer.WritePropertyName("duration");
writer.WriteValue(act.Duration);
writer.WritePropertyName("pctComplete");
writer.WriteValue(act.PctComplete);
writer.WritePropertyName("name");
writer.WriteValue(act.Name);
writer.WritePropertyName("projectId");
writer.WriteValue(act.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(act.SubProjectId);
writer.WritePropertyName("organizationId");
writer.WriteValue(act.OrganizationId);
writer.WritePropertyName("activityTypeId");
writer.WriteValue(act.ActivityTypeId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(act.SortOrder);
writer.WritePropertyName("parentClientId");
writer.WriteValue("");
writer.WritePropertyName("clientId");
writer.WriteValue("");
writer.WritePropertyName("projectName");
writer.WriteValue(act.ProjectName);
writer.WritePropertyName("plannedStart");
writer.WriteValue(act.PlannedStart);
writer.WritePropertyName("plannedEnd");
writer.WriteValue(act.PlannedEnd);
writer.WritePropertyName("laserProcessId");
writer.WriteValue(act.LaserProcessId);
writer.WritePropertyName("laserThicknessId");
writer.WriteValue(act.LaserThicknessId);
writer.WritePropertyName("materialId");
writer.WriteValue(act.MaterialId);
writer.WritePropertyName("millingMinimumRadiusId");
writer.WriteValue(act.MillingMinimumRadiusId);
writer.WritePropertyName("millingScallopHeightId");
writer.WriteValue(act.MillingScallopHeightId);
writer.WritePropertyName("modelCategoryId");
writer.WriteValue(act.ModelCategoryId);
writer.WritePropertyName("modelTypeId");
writer.WriteValue(act.ModelTypeId);
writer.WritePropertyName("rpfdmNozzleId");
writer.WriteValue(act.RpfdmNozzleId);
writer.WritePropertyName("rpfillTypeId");
writer.WriteValue(act.RpfillTypeId);
writer.WritePropertyName("varianceId");
writer.WriteValue(act.VarianceId);
writer.WritePropertyName("quantityId");
writer.WriteValue(act.QuantityId);
writer.WritePropertyName("specNotes");
writer.WriteValue(act.SpecNotes);
writer.WritePropertyName("parentActivityID");
writer.WriteValue(act.ParentActivityID);
writer.WritePropertyName("rpsparseId");
writer.WriteValue(act.RpsparseId);
writer = WriteOrganizationDto(writer, act.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach(var child in act.Children)
writer = WriteActivityDto(writer, child);
writer.WriteEndArray();
writer.WritePropertyName("activityPersons");
writer.WriteStartArray();
foreach (var actPerson in act.ActivityPersons)
writer = WriteActivityPersonDto(writer, actPerson);
writer.WriteEndArray();
writer.WritePropertyName("activityMachines");
writer.WriteStartArray();
foreach (var am in act.ActivityMachines)
writer = WriteActivitMachineDto(writer, am);
writer.WriteEndArray();
writer.WritePropertyName("customForm");
writer.WriteStartArray();
foreach (var cf in act.CustomForm)
writer = WirteActivityTypeCustomFormDto(writer, cf);
writer.WriteEndArray();
//activitytype
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityTypeDto(JsonTextWriter writer, ActivityTypeDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeId");
writer.WriteValue(at.ActivityTypeId);
writer.WritePropertyName("isMileStone");
writer.WriteValue(at.IsMileStone);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WritePropertyName("showInProject");
writer.WriteValue(at.ShowInProject);
writer.WritePropertyName("showInParent");
writer.WriteValue(at.ShowInParent);
writer.WritePropertyName("color");
writer.WriteValue(at.Color);
writer.WritePropertyName("pattern");
writer.WriteValue(at.Pattern);
writer.WritePropertyName("milestoneImage");
writer.WriteValue(at.MilestoneImage);
writer.WritePropertyName("activityCount");
writer.WriteValue(at.ActivityCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(at.ReplacedBy);
writer = WirteResourceTypeControlDto(writer, at.ResourceType);
writer.WritePropertyName("modelTypes");
writer.WriteStartArray();
foreach (var mt in at.ModelTypes)
writer = WirteGanttControlDto(writer, mt);
writer.WriteEndArray();
writer.WritePropertyName("activitySpecs");
writer.WriteStartArray();
foreach (var spec in at.ActivitySpecs)
writer = WirteActivityQuantityDto(writer, spec);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityQuantityDto(JsonTextWriter writer, ActivityQuantityDto spec)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(spec.ActivityQuantityID);
writer.WritePropertyName("description");
writer.WriteValue(spec.Description);
writer.WritePropertyName("activityTypeID");
writer.WriteValue(spec.ActivityTypeID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(spec.SortOrder);
//list
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeQuantityListDto(JsonTextWriter writer, ActivityTypeQuantityListDto value)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(value.ActivityTypeQuantityListID);
writer.WritePropertyName("description");
writer.WriteValue(value.Description);
writer.WritePropertyName("activityTypeQuantityID");
writer.WriteValue(value.ActivityTypeQuantityID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(value.SortOrder);
writer.WritePropertyName("isDefaultValue");
writer.WriteValue(value.IsDefaultValue);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteResourceTypeControlDto(JsonTextWriter writer, ResourceTypeControlDto at)
{
writer.WritePropertyName("resourceType");
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.Id);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteGanttControlDto(JsonTextWriter writer, GanttControlDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.ID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeCustomFormDto(JsonTextWriter writer, ActivityTypeCustomFormDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(at.activityQuantityID);
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(at.ActivityTypeQuantityListID);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivitMachineDto(JsonTextWriter writer, ActivityMachinesDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityMachineID");
writer.WriteValue(at.ActivityMachineID);
writer.WritePropertyName("activityID");
writer.WriteValue(at.ActivityID);
writer.WritePropertyName("effort");
writer.WriteValue(at.Effort);
writer.WritePropertyName("machineID");
writer.WriteValue(at.MachineID);
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WritePropertyName("machineType");
writer = WriteMachineTypeDto(writer, at.MachineType);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteMachineTypeDto(JsonTextWriter writer, MachineTypeDto at) {
writer.WriteStartObject();
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityPersonDto(JsonTextWriter writer, ActivityPersonDto ap) {
writer.WriteStartObject();
writer.WritePropertyName("activityPersonId");
writer.WriteValue(ap.ActivityPersonId);
writer.WritePropertyName("activityID");
writer.WriteValue(ap.ActivityID);
writer.WritePropertyName("resourceTypeID");
writer.WriteValue(ap.ResourceTypeID);
writer.WritePropertyName("personID");
writer.WriteValue(ap.PersonID);
writer.WritePropertyName("effort");
writer.WriteValue(ap.Effort);
writer.WritePropertyName("cost");
writer.WriteValue(ap.Cost);
writer.WritePropertyName("resourceType");
writer = WriteResourceTypeDto(writer, ap.ResourceType);
writer.WritePropertyName("person");
writer = WritePersonDto(writer, ap.Person);
//activitydto
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WritePersonDto(JsonTextWriter writer, PersonDto p)
{
writer.WriteStartObject();
writer.WritePropertyName("personId");
writer.WriteValue(p.PersonId);
writer.WritePropertyName("firstName");
writer.WriteValue(p.FirstName);
writer.WritePropertyName("lastName");
writer.WriteValue(p.LastName);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteResourceTypeDto(JsonTextWriter writer, ResourceTypeDto rt) {
writer.WriteStartObject();
writer.WritePropertyName("resourceTypeId");
writer.WriteValue(rt.ResourceTypeId);
writer.WritePropertyName("description");
writer.WriteValue(rt.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(rt.IsFlagged);
writer.WritePropertyName("resourceTypeCount");
writer.WriteValue(rt.ResourceTypeCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(rt.ReplacedBy);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteSubprojectPersonDto(JsonTextWriter writer, SubProjectPersonDto spp) {
writer.WriteStartObject();
writer.WritePropertyName("subProjectPersonId");
writer.WriteValue(spp.SubProjectPersonId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(spp.SubProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(spp.PersonId);
writer.WritePropertyName("subProjectPersonRoles");
writer.WriteStartArray();
foreach (var spr in spp.SubProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, spr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonDto(JsonTextWriter writer, ProjectPersonDto person)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonId");
writer.WriteValue(person.ProjectPersonId);
writer.WritePropertyName("projectId");
writer.WriteValue(person.ProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(person.PersonId);
writer.WritePropertyName("projectPersonRoles");
writer.WriteStartArray();
foreach (var ppr in person.ProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, ppr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonRoleDto(JsonTextWriter writer, ProjectPersonRoleDto ppr)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonRoleID");
writer.WriteValue(ppr.ProjectPersonRoleID);
writer.WritePropertyName("projectPersonID");
writer.WriteValue(ppr.ProjectPersonID);
writer.WritePropertyName("roleTypeID");
writer.WriteValue(ppr.RoleTypeID);
writer.WritePropertyName("description");
writer.WriteValue(ppr.Description);
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteOrganizationDto(JsonTextWriter writer, OrganizationDto org)
{
writer.WritePropertyName("organization");
if (org == null)
{
writer.WriteNull();
return writer;
}
writer.WriteStartObject();
writer.WritePropertyName("OrganizationId");
writer.WriteValue(org.OrganizationId);
writer.WritePropertyName("OrganizationName");
writer.WriteValue(org.OrganizationName);
writer.WritePropertyName("employees");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WritePropertyName("machines");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectTypeDto(JsonTextWriter writer, ProjectTypeDto pType) {
writer.WriteStartObject();
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pType.ProjectTypeId);
writer.WritePropertyName("description");
writer.WriteValue(pType.Description);
writer.WritePropertyName("rowId");
writer.WriteValue(pType.RowId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pType.SortOrder);
writer.WritePropertyName("projects");
writer.WriteStartArray();
foreach (var pjects in pType.Projects)
{
writer = WriteProjectDto(writer, pjects);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
Now this is what my current code looks like with the out of the box serializer that takes the same amount of time.
Here is the controller method.
public virtual BetterJsonResult GetGanttDataByUserOrganization()
{
var ganttChartDto = _ganttChartService.GetInitialGanttData();
return BetterJson(ganttChartDto);
}
This is what the BetterJson
which basically returns this
...
protected virtual void SerializeData(HttpResponseBase response)
{
if (ErrorMessages.Any())
{
Data = new
{
ErrorMessage = string.Join("n", ErrorMessages),
ErrorMessages = ErrorMessages.ToArray()
};
response.StatusCode = 400;
}
if (Data == null) return;
response.Write(Data.ToJson());
}
public static string ToJson<T>(this T obj, bool includeNull = true)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter { new StringEnumConverter() },
NullValueHandling = includeNull ? NullValueHandling.Include : NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return JsonConvert.SerializeObject(obj, settings);
}
c# json serialization json.net
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a large data set that I'm trying to serialize that is about 15MB
. I wanted to increase performance so I tried to manually serialize it. I was expecting some performance boost but it actually takes the same amount of time as the built in serializer
that uses reflection
. Currently it takes around ~7 minutes to serialize the data. Maybe I'm doing something wrong, maybe someone can point it out and maybe there is something else I can do to for a performance boost while serializing
the data.
To begin with here is what my controller method looks like
public void GetGanttDataByUserOrganization()
{
//takes around 5 seconds to get the DTO
var ganttChartDto = _ganttChartService.GetInitialGanttData();
//takes around 7 minutes to manually serialize the DTO it's 15MB
var st = ganttChartDto.ToGanttJson();
HttpContext.Response.WriteJson(st);
}
This part is long it's the ToGanttJson()
extension method.
public static string ToGanttJson(this IEnumerable<ProductLineDto> p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pLine in p)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(pLine.Name);
writer.WritePropertyName("productLineId");
writer.WriteValue(pLine.ProductLineId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pLine.SortOrder);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pType in pLine.ProjectType)
{
writer = WriteProjectTypeDto(writer, pType);
}
writer.WriteEndArray();
writer.WriteEndObject();
}
writer.WriteEndArray();
return sw.ToString();
}
private static JsonTextWriter WriteProjectDto(JsonTextWriter writer, ProjectDto pjects)
{
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(pjects.ProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(pjects.ProjectName);
writer.WritePropertyName("parent");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(pjects.StartDate);
writer.WritePropertyName("projectStatus");
writer.WriteValue(pjects.ProjectStatus);
writer.WritePropertyName("projectTypeRowId");
writer.WriteValue(pjects.ProjectTypeRowId);
writer.WritePropertyName("projectTypeDescription");
writer.WriteValue(pjects.ProjectTypeDescription);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pjects.SortOrder);
writer.WritePropertyName("projectStatusId");
writer.WriteValue(pjects.ProjectStatusId);
writer.WritePropertyName("productLineId");
writer.WriteValue(pjects.ProductLineId);
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pjects.ProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(pjects.OrganizationId);
writer.WritePropertyName("clientId");
writer.WriteValue(pjects.ClientId);
writer.WritePropertyName("program");
writer.WriteValue(pjects.Program);
writer.WritePropertyName("productLineName");
writer.WriteValue(pjects.ProductLineName);
writer.WritePropertyName("isShotgun");
writer.WriteValue(pjects.IsShotgun);
writer.WritePropertyName("shotgunLink");
writer.WriteValue(pjects.ShotgunLink);
writer.WritePropertyName("budgetCode");
writer.WriteValue(pjects.BudgetCode);
writer.WritePropertyName("modelType");
writer.WriteValue(pjects.ModelType);
writer.WritePropertyName("modelYear");
writer.WriteValue(pjects.ModelYear);
writer.WritePropertyName("flow");
writer.WriteValue(pjects.Flow);
writer.WritePropertyName("description");
writer.WriteValue(pjects.Description);
writer = WriteOrganizationDto(writer, pjects.Organization);
writer.WritePropertyName("projectPersons");
writer.WriteStartArray();
foreach (var person in pjects.ProjectPersons)
{
writer = WriteProjectPersonDto(writer, person);
}
writer.WriteEndArray();
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var sp in pjects.Children)
{
writer = WriteSubProjectDto(writer, sp);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteSubProjectDto(JsonTextWriter writer, SubProjectDto sp) {
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(sp.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(sp.SubProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(sp.ProjectName);
writer.WritePropertyName("parentId");
writer.WriteValue(sp.ParentId);
writer.WritePropertyName("subProjectTypeId");
writer.WriteValue(sp.SubProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(sp.OrganizationId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(sp.SortOrder);
writer.WritePropertyName("clientId");
writer.WriteValue(sp.ClientId);
writer.WritePropertyName("projectClientId");
writer.WriteValue(sp.ProjectClientId);
writer.WritePropertyName("subProjectParentClientId");
writer.WriteValue(sp.SubProjectParentClientId);
writer.WritePropertyName("parentSubProjectId");
writer.WriteValue(sp.ParentSubProjectId);
writer.WritePropertyName("isShotgun");
writer.WriteValue(sp.IsShotgun);
writer = WriteOrganizationDto(writer, sp.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var childSp in sp.Children)
{
writer = WriteSubProjectDto(writer, childSp);
}
writer.WriteEndArray();
writer.WritePropertyName("subProjectPersons");
writer.WriteStartArray();
foreach (var spp in sp.SubProjectPersons)
writer = WriteSubprojectPersonDto(writer, spp);
writer.WriteEndArray();
//activities
writer.WritePropertyName("activities");
writer.WriteStartArray();
foreach (var act in sp.Activities)
writer = WriteActivityDto(writer, act);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityDto(JsonTextWriter writer, ActivityDto act)
{
writer.WriteStartObject();
writer.WritePropertyName("acivityId");
writer.WriteValue(act.ActivityId);
writer.WritePropertyName("description");
writer.WriteValue(act.Description);
writer.WritePropertyName("activityName");
writer.WriteValue(act.Name);
writer.WritePropertyName("activityDateRange");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(act.StartDate);
writer.WritePropertyName("endDate");
writer.WriteValue(act.EndDate);
writer.WritePropertyName("duration");
writer.WriteValue(act.Duration);
writer.WritePropertyName("pctComplete");
writer.WriteValue(act.PctComplete);
writer.WritePropertyName("name");
writer.WriteValue(act.Name);
writer.WritePropertyName("projectId");
writer.WriteValue(act.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(act.SubProjectId);
writer.WritePropertyName("organizationId");
writer.WriteValue(act.OrganizationId);
writer.WritePropertyName("activityTypeId");
writer.WriteValue(act.ActivityTypeId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(act.SortOrder);
writer.WritePropertyName("parentClientId");
writer.WriteValue("");
writer.WritePropertyName("clientId");
writer.WriteValue("");
writer.WritePropertyName("projectName");
writer.WriteValue(act.ProjectName);
writer.WritePropertyName("plannedStart");
writer.WriteValue(act.PlannedStart);
writer.WritePropertyName("plannedEnd");
writer.WriteValue(act.PlannedEnd);
writer.WritePropertyName("laserProcessId");
writer.WriteValue(act.LaserProcessId);
writer.WritePropertyName("laserThicknessId");
writer.WriteValue(act.LaserThicknessId);
writer.WritePropertyName("materialId");
writer.WriteValue(act.MaterialId);
writer.WritePropertyName("millingMinimumRadiusId");
writer.WriteValue(act.MillingMinimumRadiusId);
writer.WritePropertyName("millingScallopHeightId");
writer.WriteValue(act.MillingScallopHeightId);
writer.WritePropertyName("modelCategoryId");
writer.WriteValue(act.ModelCategoryId);
writer.WritePropertyName("modelTypeId");
writer.WriteValue(act.ModelTypeId);
writer.WritePropertyName("rpfdmNozzleId");
writer.WriteValue(act.RpfdmNozzleId);
writer.WritePropertyName("rpfillTypeId");
writer.WriteValue(act.RpfillTypeId);
writer.WritePropertyName("varianceId");
writer.WriteValue(act.VarianceId);
writer.WritePropertyName("quantityId");
writer.WriteValue(act.QuantityId);
writer.WritePropertyName("specNotes");
writer.WriteValue(act.SpecNotes);
writer.WritePropertyName("parentActivityID");
writer.WriteValue(act.ParentActivityID);
writer.WritePropertyName("rpsparseId");
writer.WriteValue(act.RpsparseId);
writer = WriteOrganizationDto(writer, act.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach(var child in act.Children)
writer = WriteActivityDto(writer, child);
writer.WriteEndArray();
writer.WritePropertyName("activityPersons");
writer.WriteStartArray();
foreach (var actPerson in act.ActivityPersons)
writer = WriteActivityPersonDto(writer, actPerson);
writer.WriteEndArray();
writer.WritePropertyName("activityMachines");
writer.WriteStartArray();
foreach (var am in act.ActivityMachines)
writer = WriteActivitMachineDto(writer, am);
writer.WriteEndArray();
writer.WritePropertyName("customForm");
writer.WriteStartArray();
foreach (var cf in act.CustomForm)
writer = WirteActivityTypeCustomFormDto(writer, cf);
writer.WriteEndArray();
//activitytype
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityTypeDto(JsonTextWriter writer, ActivityTypeDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeId");
writer.WriteValue(at.ActivityTypeId);
writer.WritePropertyName("isMileStone");
writer.WriteValue(at.IsMileStone);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WritePropertyName("showInProject");
writer.WriteValue(at.ShowInProject);
writer.WritePropertyName("showInParent");
writer.WriteValue(at.ShowInParent);
writer.WritePropertyName("color");
writer.WriteValue(at.Color);
writer.WritePropertyName("pattern");
writer.WriteValue(at.Pattern);
writer.WritePropertyName("milestoneImage");
writer.WriteValue(at.MilestoneImage);
writer.WritePropertyName("activityCount");
writer.WriteValue(at.ActivityCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(at.ReplacedBy);
writer = WirteResourceTypeControlDto(writer, at.ResourceType);
writer.WritePropertyName("modelTypes");
writer.WriteStartArray();
foreach (var mt in at.ModelTypes)
writer = WirteGanttControlDto(writer, mt);
writer.WriteEndArray();
writer.WritePropertyName("activitySpecs");
writer.WriteStartArray();
foreach (var spec in at.ActivitySpecs)
writer = WirteActivityQuantityDto(writer, spec);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityQuantityDto(JsonTextWriter writer, ActivityQuantityDto spec)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(spec.ActivityQuantityID);
writer.WritePropertyName("description");
writer.WriteValue(spec.Description);
writer.WritePropertyName("activityTypeID");
writer.WriteValue(spec.ActivityTypeID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(spec.SortOrder);
//list
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeQuantityListDto(JsonTextWriter writer, ActivityTypeQuantityListDto value)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(value.ActivityTypeQuantityListID);
writer.WritePropertyName("description");
writer.WriteValue(value.Description);
writer.WritePropertyName("activityTypeQuantityID");
writer.WriteValue(value.ActivityTypeQuantityID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(value.SortOrder);
writer.WritePropertyName("isDefaultValue");
writer.WriteValue(value.IsDefaultValue);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteResourceTypeControlDto(JsonTextWriter writer, ResourceTypeControlDto at)
{
writer.WritePropertyName("resourceType");
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.Id);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteGanttControlDto(JsonTextWriter writer, GanttControlDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.ID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeCustomFormDto(JsonTextWriter writer, ActivityTypeCustomFormDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(at.activityQuantityID);
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(at.ActivityTypeQuantityListID);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivitMachineDto(JsonTextWriter writer, ActivityMachinesDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityMachineID");
writer.WriteValue(at.ActivityMachineID);
writer.WritePropertyName("activityID");
writer.WriteValue(at.ActivityID);
writer.WritePropertyName("effort");
writer.WriteValue(at.Effort);
writer.WritePropertyName("machineID");
writer.WriteValue(at.MachineID);
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WritePropertyName("machineType");
writer = WriteMachineTypeDto(writer, at.MachineType);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteMachineTypeDto(JsonTextWriter writer, MachineTypeDto at) {
writer.WriteStartObject();
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityPersonDto(JsonTextWriter writer, ActivityPersonDto ap) {
writer.WriteStartObject();
writer.WritePropertyName("activityPersonId");
writer.WriteValue(ap.ActivityPersonId);
writer.WritePropertyName("activityID");
writer.WriteValue(ap.ActivityID);
writer.WritePropertyName("resourceTypeID");
writer.WriteValue(ap.ResourceTypeID);
writer.WritePropertyName("personID");
writer.WriteValue(ap.PersonID);
writer.WritePropertyName("effort");
writer.WriteValue(ap.Effort);
writer.WritePropertyName("cost");
writer.WriteValue(ap.Cost);
writer.WritePropertyName("resourceType");
writer = WriteResourceTypeDto(writer, ap.ResourceType);
writer.WritePropertyName("person");
writer = WritePersonDto(writer, ap.Person);
//activitydto
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WritePersonDto(JsonTextWriter writer, PersonDto p)
{
writer.WriteStartObject();
writer.WritePropertyName("personId");
writer.WriteValue(p.PersonId);
writer.WritePropertyName("firstName");
writer.WriteValue(p.FirstName);
writer.WritePropertyName("lastName");
writer.WriteValue(p.LastName);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteResourceTypeDto(JsonTextWriter writer, ResourceTypeDto rt) {
writer.WriteStartObject();
writer.WritePropertyName("resourceTypeId");
writer.WriteValue(rt.ResourceTypeId);
writer.WritePropertyName("description");
writer.WriteValue(rt.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(rt.IsFlagged);
writer.WritePropertyName("resourceTypeCount");
writer.WriteValue(rt.ResourceTypeCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(rt.ReplacedBy);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteSubprojectPersonDto(JsonTextWriter writer, SubProjectPersonDto spp) {
writer.WriteStartObject();
writer.WritePropertyName("subProjectPersonId");
writer.WriteValue(spp.SubProjectPersonId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(spp.SubProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(spp.PersonId);
writer.WritePropertyName("subProjectPersonRoles");
writer.WriteStartArray();
foreach (var spr in spp.SubProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, spr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonDto(JsonTextWriter writer, ProjectPersonDto person)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonId");
writer.WriteValue(person.ProjectPersonId);
writer.WritePropertyName("projectId");
writer.WriteValue(person.ProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(person.PersonId);
writer.WritePropertyName("projectPersonRoles");
writer.WriteStartArray();
foreach (var ppr in person.ProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, ppr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonRoleDto(JsonTextWriter writer, ProjectPersonRoleDto ppr)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonRoleID");
writer.WriteValue(ppr.ProjectPersonRoleID);
writer.WritePropertyName("projectPersonID");
writer.WriteValue(ppr.ProjectPersonID);
writer.WritePropertyName("roleTypeID");
writer.WriteValue(ppr.RoleTypeID);
writer.WritePropertyName("description");
writer.WriteValue(ppr.Description);
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteOrganizationDto(JsonTextWriter writer, OrganizationDto org)
{
writer.WritePropertyName("organization");
if (org == null)
{
writer.WriteNull();
return writer;
}
writer.WriteStartObject();
writer.WritePropertyName("OrganizationId");
writer.WriteValue(org.OrganizationId);
writer.WritePropertyName("OrganizationName");
writer.WriteValue(org.OrganizationName);
writer.WritePropertyName("employees");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WritePropertyName("machines");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectTypeDto(JsonTextWriter writer, ProjectTypeDto pType) {
writer.WriteStartObject();
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pType.ProjectTypeId);
writer.WritePropertyName("description");
writer.WriteValue(pType.Description);
writer.WritePropertyName("rowId");
writer.WriteValue(pType.RowId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pType.SortOrder);
writer.WritePropertyName("projects");
writer.WriteStartArray();
foreach (var pjects in pType.Projects)
{
writer = WriteProjectDto(writer, pjects);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
Now this is what my current code looks like with the out of the box serializer that takes the same amount of time.
Here is the controller method.
public virtual BetterJsonResult GetGanttDataByUserOrganization()
{
var ganttChartDto = _ganttChartService.GetInitialGanttData();
return BetterJson(ganttChartDto);
}
This is what the BetterJson
which basically returns this
...
protected virtual void SerializeData(HttpResponseBase response)
{
if (ErrorMessages.Any())
{
Data = new
{
ErrorMessage = string.Join("n", ErrorMessages),
ErrorMessages = ErrorMessages.ToArray()
};
response.StatusCode = 400;
}
if (Data == null) return;
response.Write(Data.ToJson());
}
public static string ToJson<T>(this T obj, bool includeNull = true)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter { new StringEnumConverter() },
NullValueHandling = includeNull ? NullValueHandling.Include : NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return JsonConvert.SerializeObject(obj, settings);
}
c# json serialization json.net
I have a large data set that I'm trying to serialize that is about 15MB
. I wanted to increase performance so I tried to manually serialize it. I was expecting some performance boost but it actually takes the same amount of time as the built in serializer
that uses reflection
. Currently it takes around ~7 minutes to serialize the data. Maybe I'm doing something wrong, maybe someone can point it out and maybe there is something else I can do to for a performance boost while serializing
the data.
To begin with here is what my controller method looks like
public void GetGanttDataByUserOrganization()
{
//takes around 5 seconds to get the DTO
var ganttChartDto = _ganttChartService.GetInitialGanttData();
//takes around 7 minutes to manually serialize the DTO it's 15MB
var st = ganttChartDto.ToGanttJson();
HttpContext.Response.WriteJson(st);
}
This part is long it's the ToGanttJson()
extension method.
public static string ToGanttJson(this IEnumerable<ProductLineDto> p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pLine in p)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(pLine.Name);
writer.WritePropertyName("productLineId");
writer.WriteValue(pLine.ProductLineId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pLine.SortOrder);
writer.WritePropertyName("projectType");
writer.WriteStartArray();
foreach (var pType in pLine.ProjectType)
{
writer = WriteProjectTypeDto(writer, pType);
}
writer.WriteEndArray();
writer.WriteEndObject();
}
writer.WriteEndArray();
return sw.ToString();
}
private static JsonTextWriter WriteProjectDto(JsonTextWriter writer, ProjectDto pjects)
{
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(pjects.ProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(pjects.ProjectName);
writer.WritePropertyName("parent");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(pjects.StartDate);
writer.WritePropertyName("projectStatus");
writer.WriteValue(pjects.ProjectStatus);
writer.WritePropertyName("projectTypeRowId");
writer.WriteValue(pjects.ProjectTypeRowId);
writer.WritePropertyName("projectTypeDescription");
writer.WriteValue(pjects.ProjectTypeDescription);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pjects.SortOrder);
writer.WritePropertyName("projectStatusId");
writer.WriteValue(pjects.ProjectStatusId);
writer.WritePropertyName("productLineId");
writer.WriteValue(pjects.ProductLineId);
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pjects.ProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(pjects.OrganizationId);
writer.WritePropertyName("clientId");
writer.WriteValue(pjects.ClientId);
writer.WritePropertyName("program");
writer.WriteValue(pjects.Program);
writer.WritePropertyName("productLineName");
writer.WriteValue(pjects.ProductLineName);
writer.WritePropertyName("isShotgun");
writer.WriteValue(pjects.IsShotgun);
writer.WritePropertyName("shotgunLink");
writer.WriteValue(pjects.ShotgunLink);
writer.WritePropertyName("budgetCode");
writer.WriteValue(pjects.BudgetCode);
writer.WritePropertyName("modelType");
writer.WriteValue(pjects.ModelType);
writer.WritePropertyName("modelYear");
writer.WriteValue(pjects.ModelYear);
writer.WritePropertyName("flow");
writer.WriteValue(pjects.Flow);
writer.WritePropertyName("description");
writer.WriteValue(pjects.Description);
writer = WriteOrganizationDto(writer, pjects.Organization);
writer.WritePropertyName("projectPersons");
writer.WriteStartArray();
foreach (var person in pjects.ProjectPersons)
{
writer = WriteProjectPersonDto(writer, person);
}
writer.WriteEndArray();
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var sp in pjects.Children)
{
writer = WriteSubProjectDto(writer, sp);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteSubProjectDto(JsonTextWriter writer, SubProjectDto sp) {
writer.WriteStartObject();
writer.WritePropertyName("projectId");
writer.WriteValue(sp.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(sp.SubProjectId);
writer.WritePropertyName("projectName");
writer.WriteValue(sp.ProjectName);
writer.WritePropertyName("parentId");
writer.WriteValue(sp.ParentId);
writer.WritePropertyName("subProjectTypeId");
writer.WriteValue(sp.SubProjectTypeId);
writer.WritePropertyName("organizationId");
writer.WriteValue(sp.OrganizationId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(sp.SortOrder);
writer.WritePropertyName("clientId");
writer.WriteValue(sp.ClientId);
writer.WritePropertyName("projectClientId");
writer.WriteValue(sp.ProjectClientId);
writer.WritePropertyName("subProjectParentClientId");
writer.WriteValue(sp.SubProjectParentClientId);
writer.WritePropertyName("parentSubProjectId");
writer.WriteValue(sp.ParentSubProjectId);
writer.WritePropertyName("isShotgun");
writer.WriteValue(sp.IsShotgun);
writer = WriteOrganizationDto(writer, sp.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach (var childSp in sp.Children)
{
writer = WriteSubProjectDto(writer, childSp);
}
writer.WriteEndArray();
writer.WritePropertyName("subProjectPersons");
writer.WriteStartArray();
foreach (var spp in sp.SubProjectPersons)
writer = WriteSubprojectPersonDto(writer, spp);
writer.WriteEndArray();
//activities
writer.WritePropertyName("activities");
writer.WriteStartArray();
foreach (var act in sp.Activities)
writer = WriteActivityDto(writer, act);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityDto(JsonTextWriter writer, ActivityDto act)
{
writer.WriteStartObject();
writer.WritePropertyName("acivityId");
writer.WriteValue(act.ActivityId);
writer.WritePropertyName("description");
writer.WriteValue(act.Description);
writer.WritePropertyName("activityName");
writer.WriteValue(act.Name);
writer.WritePropertyName("activityDateRange");
writer.WriteValue("");
writer.WritePropertyName("startDate");
writer.WriteValue(act.StartDate);
writer.WritePropertyName("endDate");
writer.WriteValue(act.EndDate);
writer.WritePropertyName("duration");
writer.WriteValue(act.Duration);
writer.WritePropertyName("pctComplete");
writer.WriteValue(act.PctComplete);
writer.WritePropertyName("name");
writer.WriteValue(act.Name);
writer.WritePropertyName("projectId");
writer.WriteValue(act.ProjectId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(act.SubProjectId);
writer.WritePropertyName("organizationId");
writer.WriteValue(act.OrganizationId);
writer.WritePropertyName("activityTypeId");
writer.WriteValue(act.ActivityTypeId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(act.SortOrder);
writer.WritePropertyName("parentClientId");
writer.WriteValue("");
writer.WritePropertyName("clientId");
writer.WriteValue("");
writer.WritePropertyName("projectName");
writer.WriteValue(act.ProjectName);
writer.WritePropertyName("plannedStart");
writer.WriteValue(act.PlannedStart);
writer.WritePropertyName("plannedEnd");
writer.WriteValue(act.PlannedEnd);
writer.WritePropertyName("laserProcessId");
writer.WriteValue(act.LaserProcessId);
writer.WritePropertyName("laserThicknessId");
writer.WriteValue(act.LaserThicknessId);
writer.WritePropertyName("materialId");
writer.WriteValue(act.MaterialId);
writer.WritePropertyName("millingMinimumRadiusId");
writer.WriteValue(act.MillingMinimumRadiusId);
writer.WritePropertyName("millingScallopHeightId");
writer.WriteValue(act.MillingScallopHeightId);
writer.WritePropertyName("modelCategoryId");
writer.WriteValue(act.ModelCategoryId);
writer.WritePropertyName("modelTypeId");
writer.WriteValue(act.ModelTypeId);
writer.WritePropertyName("rpfdmNozzleId");
writer.WriteValue(act.RpfdmNozzleId);
writer.WritePropertyName("rpfillTypeId");
writer.WriteValue(act.RpfillTypeId);
writer.WritePropertyName("varianceId");
writer.WriteValue(act.VarianceId);
writer.WritePropertyName("quantityId");
writer.WriteValue(act.QuantityId);
writer.WritePropertyName("specNotes");
writer.WriteValue(act.SpecNotes);
writer.WritePropertyName("parentActivityID");
writer.WriteValue(act.ParentActivityID);
writer.WritePropertyName("rpsparseId");
writer.WriteValue(act.RpsparseId);
writer = WriteOrganizationDto(writer, act.Organization);
writer.WritePropertyName("children");
writer.WriteStartArray();
foreach(var child in act.Children)
writer = WriteActivityDto(writer, child);
writer.WriteEndArray();
writer.WritePropertyName("activityPersons");
writer.WriteStartArray();
foreach (var actPerson in act.ActivityPersons)
writer = WriteActivityPersonDto(writer, actPerson);
writer.WriteEndArray();
writer.WritePropertyName("activityMachines");
writer.WriteStartArray();
foreach (var am in act.ActivityMachines)
writer = WriteActivitMachineDto(writer, am);
writer.WriteEndArray();
writer.WritePropertyName("customForm");
writer.WriteStartArray();
foreach (var cf in act.CustomForm)
writer = WirteActivityTypeCustomFormDto(writer, cf);
writer.WriteEndArray();
//activitytype
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityTypeDto(JsonTextWriter writer, ActivityTypeDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeId");
writer.WriteValue(at.ActivityTypeId);
writer.WritePropertyName("isMileStone");
writer.WriteValue(at.IsMileStone);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WritePropertyName("showInProject");
writer.WriteValue(at.ShowInProject);
writer.WritePropertyName("showInParent");
writer.WriteValue(at.ShowInParent);
writer.WritePropertyName("color");
writer.WriteValue(at.Color);
writer.WritePropertyName("pattern");
writer.WriteValue(at.Pattern);
writer.WritePropertyName("milestoneImage");
writer.WriteValue(at.MilestoneImage);
writer.WritePropertyName("activityCount");
writer.WriteValue(at.ActivityCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(at.ReplacedBy);
writer = WirteResourceTypeControlDto(writer, at.ResourceType);
writer.WritePropertyName("modelTypes");
writer.WriteStartArray();
foreach (var mt in at.ModelTypes)
writer = WirteGanttControlDto(writer, mt);
writer.WriteEndArray();
writer.WritePropertyName("activitySpecs");
writer.WriteStartArray();
foreach (var spec in at.ActivitySpecs)
writer = WirteActivityQuantityDto(writer, spec);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityQuantityDto(JsonTextWriter writer, ActivityQuantityDto spec)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(spec.ActivityQuantityID);
writer.WritePropertyName("description");
writer.WriteValue(spec.Description);
writer.WritePropertyName("activityTypeID");
writer.WriteValue(spec.ActivityTypeID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(spec.SortOrder);
//list
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeQuantityListDto(JsonTextWriter writer, ActivityTypeQuantityListDto value)
{
writer.WriteStartObject();
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(value.ActivityTypeQuantityListID);
writer.WritePropertyName("description");
writer.WriteValue(value.Description);
writer.WritePropertyName("activityTypeQuantityID");
writer.WriteValue(value.ActivityTypeQuantityID);
writer.WritePropertyName("sortOrder");
writer.WriteValue(value.SortOrder);
writer.WritePropertyName("isDefaultValue");
writer.WriteValue(value.IsDefaultValue);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteResourceTypeControlDto(JsonTextWriter writer, ResourceTypeControlDto at)
{
writer.WritePropertyName("resourceType");
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.Id);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteGanttControlDto(JsonTextWriter writer, GanttControlDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(at.ID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WirteActivityTypeCustomFormDto(JsonTextWriter writer, ActivityTypeCustomFormDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityQuantityID");
writer.WriteValue(at.activityQuantityID);
writer.WritePropertyName("activityTypeQuantityListID");
writer.WriteValue(at.ActivityTypeQuantityListID);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivitMachineDto(JsonTextWriter writer, ActivityMachinesDto at)
{
writer.WriteStartObject();
writer.WritePropertyName("activityMachineID");
writer.WriteValue(at.ActivityMachineID);
writer.WritePropertyName("activityID");
writer.WriteValue(at.ActivityID);
writer.WritePropertyName("effort");
writer.WriteValue(at.Effort);
writer.WritePropertyName("machineID");
writer.WriteValue(at.MachineID);
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("name");
writer.WriteValue(at.Name);
writer.WritePropertyName("machineType");
writer = WriteMachineTypeDto(writer, at.MachineType);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteMachineTypeDto(JsonTextWriter writer, MachineTypeDto at) {
writer.WriteStartObject();
writer.WritePropertyName("machineTypeID");
writer.WriteValue(at.MachineTypeID);
writer.WritePropertyName("description");
writer.WriteValue(at.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(at.IsFlagged);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteActivityPersonDto(JsonTextWriter writer, ActivityPersonDto ap) {
writer.WriteStartObject();
writer.WritePropertyName("activityPersonId");
writer.WriteValue(ap.ActivityPersonId);
writer.WritePropertyName("activityID");
writer.WriteValue(ap.ActivityID);
writer.WritePropertyName("resourceTypeID");
writer.WriteValue(ap.ResourceTypeID);
writer.WritePropertyName("personID");
writer.WriteValue(ap.PersonID);
writer.WritePropertyName("effort");
writer.WriteValue(ap.Effort);
writer.WritePropertyName("cost");
writer.WriteValue(ap.Cost);
writer.WritePropertyName("resourceType");
writer = WriteResourceTypeDto(writer, ap.ResourceType);
writer.WritePropertyName("person");
writer = WritePersonDto(writer, ap.Person);
//activitydto
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WritePersonDto(JsonTextWriter writer, PersonDto p)
{
writer.WriteStartObject();
writer.WritePropertyName("personId");
writer.WriteValue(p.PersonId);
writer.WritePropertyName("firstName");
writer.WriteValue(p.FirstName);
writer.WritePropertyName("lastName");
writer.WriteValue(p.LastName);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteResourceTypeDto(JsonTextWriter writer, ResourceTypeDto rt) {
writer.WriteStartObject();
writer.WritePropertyName("resourceTypeId");
writer.WriteValue(rt.ResourceTypeId);
writer.WritePropertyName("description");
writer.WriteValue(rt.Description);
writer.WritePropertyName("isFlagged");
writer.WriteValue(rt.IsFlagged);
writer.WritePropertyName("resourceTypeCount");
writer.WriteValue(rt.ResourceTypeCount);
writer.WritePropertyName("replacedBy");
writer.WriteValue(rt.ReplacedBy);
writer.WriteEndObject();
return writer;
}
public static JsonTextWriter WriteSubprojectPersonDto(JsonTextWriter writer, SubProjectPersonDto spp) {
writer.WriteStartObject();
writer.WritePropertyName("subProjectPersonId");
writer.WriteValue(spp.SubProjectPersonId);
writer.WritePropertyName("subProjectId");
writer.WriteValue(spp.SubProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(spp.PersonId);
writer.WritePropertyName("subProjectPersonRoles");
writer.WriteStartArray();
foreach (var spr in spp.SubProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, spr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonDto(JsonTextWriter writer, ProjectPersonDto person)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonId");
writer.WriteValue(person.ProjectPersonId);
writer.WritePropertyName("projectId");
writer.WriteValue(person.ProjectId);
writer.WritePropertyName("personId");
writer.WriteValue(person.PersonId);
writer.WritePropertyName("projectPersonRoles");
writer.WriteStartArray();
foreach (var ppr in person.ProjectPersonRoles)
writer = WriteProjectPersonRoleDto(writer, ppr);
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectPersonRoleDto(JsonTextWriter writer, ProjectPersonRoleDto ppr)
{
writer.WriteStartObject();
writer.WritePropertyName("projectPersonRoleID");
writer.WriteValue(ppr.ProjectPersonRoleID);
writer.WritePropertyName("projectPersonID");
writer.WriteValue(ppr.ProjectPersonID);
writer.WritePropertyName("roleTypeID");
writer.WriteValue(ppr.RoleTypeID);
writer.WritePropertyName("description");
writer.WriteValue(ppr.Description);
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteOrganizationDto(JsonTextWriter writer, OrganizationDto org)
{
writer.WritePropertyName("organization");
if (org == null)
{
writer.WriteNull();
return writer;
}
writer.WriteStartObject();
writer.WritePropertyName("OrganizationId");
writer.WriteValue(org.OrganizationId);
writer.WritePropertyName("OrganizationName");
writer.WriteValue(org.OrganizationName);
writer.WritePropertyName("employees");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WritePropertyName("machines");
writer.WriteStartArray();
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
private static JsonTextWriter WriteProjectTypeDto(JsonTextWriter writer, ProjectTypeDto pType) {
writer.WriteStartObject();
writer.WritePropertyName("projectTypeId");
writer.WriteValue(pType.ProjectTypeId);
writer.WritePropertyName("description");
writer.WriteValue(pType.Description);
writer.WritePropertyName("rowId");
writer.WriteValue(pType.RowId);
writer.WritePropertyName("sortOrder");
writer.WriteValue(pType.SortOrder);
writer.WritePropertyName("projects");
writer.WriteStartArray();
foreach (var pjects in pType.Projects)
{
writer = WriteProjectDto(writer, pjects);
}
writer.WriteEndArray();
writer.WriteEndObject();
return writer;
}
Now this is what my current code looks like with the out of the box serializer that takes the same amount of time.
Here is the controller method.
public virtual BetterJsonResult GetGanttDataByUserOrganization()
{
var ganttChartDto = _ganttChartService.GetInitialGanttData();
return BetterJson(ganttChartDto);
}
This is what the BetterJson
which basically returns this
...
protected virtual void SerializeData(HttpResponseBase response)
{
if (ErrorMessages.Any())
{
Data = new
{
ErrorMessage = string.Join("n", ErrorMessages),
ErrorMessages = ErrorMessages.ToArray()
};
response.StatusCode = 400;
}
if (Data == null) return;
response.Write(Data.ToJson());
}
public static string ToJson<T>(this T obj, bool includeNull = true)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter { new StringEnumConverter() },
NullValueHandling = includeNull ? NullValueHandling.Include : NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return JsonConvert.SerializeObject(obj, settings);
}
c# json serialization json.net
c# json serialization json.net
asked 4 mins ago
Ortho Home Defense
1898
1898
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f208802%2fjson-net-manual-serialization-performance%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown