From ca376995792d2e2a1a7f39760989496702a8f603 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 6 Dec 2017 11:21:42 -0800 Subject: Fix handling of long values and baseUri in path fields --- src/WixToolset.Data/IntermediateFieldValue.cs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/WixToolset.Data/IntermediateFieldValue.cs') diff --git a/src/WixToolset.Data/IntermediateFieldValue.cs b/src/WixToolset.Data/IntermediateFieldValue.cs index 2064afec..88bfb910 100644 --- a/src/WixToolset.Data/IntermediateFieldValue.cs +++ b/src/WixToolset.Data/IntermediateFieldValue.cs @@ -45,7 +45,7 @@ namespace WixToolset.Data return value.AsString(); } - internal static IntermediateFieldValue Deserialize(JsonObject jsonObject) + internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type) { var context = jsonObject.GetValueOrDefault("context"); if (!jsonObject.TryGetValue("data", out var data)) @@ -55,26 +55,30 @@ namespace WixToolset.Data var value = data; - if (data is JsonObject jsonData) + if (data is string) { - Uri baseUri = null; - - if (jsonData.TryGetValue("baseUri", out var baseUriValue) && baseUriValue is string) + } + else if (data is long) + { + if (type == IntermediateFieldType.Number) { - baseUri = new Uri((string)baseUriValue); + value = Convert.ToInt32(data); } + } + else if (data is JsonObject jsonData) + { jsonData.TryGetValue("embeddedIndex", out var embeddedIndex); value = new IntermediateFieldPathValue { - BaseUri = baseUri, - EmbeddedFileIndex = (int?)embeddedIndex, + BaseUri = (embeddedIndex == null) ? null : baseUri, + EmbeddedFileIndex = (embeddedIndex == null) ? null : (int?)Convert.ToInt32(embeddedIndex), Path = jsonData.GetValueOrDefault("path"), }; } var previousValueJson = jsonObject.GetValueOrDefault("prev"); - var previousValue = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson); + var previousValue = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson, baseUri, type); return new IntermediateFieldValue { @@ -97,10 +101,7 @@ namespace WixToolset.Data { var jsonData = new JsonObject(); - if (pathField.BaseUri != null) - { - jsonData.Add("baseUri", pathField.BaseUri.AbsoluteUri); - } + // pathField.BaseUri is set during load, not saved. if (pathField.EmbeddedFileIndex.HasValue) { -- cgit v1.2.3-55-g6feb