diff --git a/server/AyaNova/biz/CustomerBiz.cs b/server/AyaNova/biz/CustomerBiz.cs index a3e7993c..dec2071e 100644 --- a/server/AyaNova/biz/CustomerBiz.cs +++ b/server/AyaNova/biz/CustomerBiz.cs @@ -269,14 +269,15 @@ namespace AyaNova.Biz foreach (Customer w in orderedList) { var jo = JObject.FromObject(w); - jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); + if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"])) + jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); ReportData.Add(jo); } } return ReportData; } - + //////////////////////////////////////////////////////////////////////////////////////////////// // IMPORT EXPORT // @@ -295,12 +296,12 @@ namespace AyaNova.Biz public async Task> ImportData(JArray ja) { List ImportResult = new List(); - string ImportTag=$"imported-{FileUtil.GetSafeDateFileName()}"; - + string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; + var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); foreach (JObject j in ja) { - var w = j.ToObject(jsset); + var w = j.ToObject(jsset); if (j["CustomFields"] != null) w.CustomFields = j["CustomFields"].ToString(); w.Tags.Add(ImportTag);//so user can find them all and revert later if necessary diff --git a/server/AyaNova/biz/CustomerNoteBiz.cs b/server/AyaNova/biz/CustomerNoteBiz.cs index ce738101..fb15e1bc 100644 --- a/server/AyaNova/biz/CustomerNoteBiz.cs +++ b/server/AyaNova/biz/CustomerNoteBiz.cs @@ -180,8 +180,7 @@ namespace AyaNova.Biz var orderedList = from id in batch join z in batchResults on id equals z.Id select z; foreach (CustomerNote w in orderedList) { - var jo = JObject.FromObject(w); - // jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); + var jo = JObject.FromObject(w); ReportData.Add(jo); } } diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index a74a6ec2..4476703f 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -303,7 +303,8 @@ namespace AyaNova.Biz foreach (Widget w in orderedList) { var jo = JObject.FromObject(w); - jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); + if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"])) + jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); ReportData.Add(jo); } } @@ -332,12 +333,12 @@ namespace AyaNova.Biz public async Task> ImportData(JArray ja) { List ImportResult = new List(); - string ImportTag=$"imported-{FileUtil.GetSafeDateFileName()}"; - + string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; + var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); foreach (JObject j in ja) { - var w = j.ToObject(jsset); + var w = j.ToObject(jsset); if (j["CustomFields"] != null) w.CustomFields = j["CustomFields"].ToString(); w.Tags.Add(ImportTag);//so user can find them all and revert later if necessary diff --git a/server/AyaNova/util/JsonUtil.cs b/server/AyaNova/util/JsonUtil.cs index 996d97da..f8b09a60 100644 --- a/server/AyaNova/util/JsonUtil.cs +++ b/server/AyaNova/util/JsonUtil.cs @@ -69,6 +69,15 @@ namespace AyaNova.Util return ret; } + public static bool JTokenIsNullOrEmpty(JToken token) + { + return (token == null) || + (token.Type == JTokenType.Array && !token.HasValues) || + (token.Type == JTokenType.Object && !token.HasValues) || + (token.Type == JTokenType.String && token.ToString() == String.Empty) || + (token.Type == JTokenType.Null); + } + //Contract resolver used for exporting to file translations and report templates //and ignoring specified propertes public class ShouldSerializeContractResolver : DefaultContractResolver @@ -88,6 +97,8 @@ namespace AyaNova.Util + + }//eoc }//eons \ No newline at end of file