diff options
Diffstat (limited to '')
-rw-r--r-- | src/WixToolset.Data/IntermediateFieldValue.cs | 27 |
1 files changed, 14 insertions, 13 deletions
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 | |||
45 | return value.AsString(); | 45 | return value.AsString(); |
46 | } | 46 | } |
47 | 47 | ||
48 | internal static IntermediateFieldValue Deserialize(JsonObject jsonObject) | 48 | internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type) |
49 | { | 49 | { |
50 | var context = jsonObject.GetValueOrDefault<string>("context"); | 50 | var context = jsonObject.GetValueOrDefault<string>("context"); |
51 | if (!jsonObject.TryGetValue("data", out var data)) | 51 | if (!jsonObject.TryGetValue("data", out var data)) |
@@ -55,26 +55,30 @@ namespace WixToolset.Data | |||
55 | 55 | ||
56 | var value = data; | 56 | var value = data; |
57 | 57 | ||
58 | if (data is JsonObject jsonData) | 58 | if (data is string) |
59 | { | 59 | { |
60 | Uri baseUri = null; | 60 | } |
61 | 61 | else if (data is long) | |
62 | if (jsonData.TryGetValue("baseUri", out var baseUriValue) && baseUriValue is string) | 62 | { |
63 | if (type == IntermediateFieldType.Number) | ||
63 | { | 64 | { |
64 | baseUri = new Uri((string)baseUriValue); | 65 | value = Convert.ToInt32(data); |
65 | } | 66 | } |
67 | } | ||
68 | else if (data is JsonObject jsonData) | ||
69 | { | ||
66 | jsonData.TryGetValue("embeddedIndex", out var embeddedIndex); | 70 | jsonData.TryGetValue("embeddedIndex", out var embeddedIndex); |
67 | 71 | ||
68 | value = new IntermediateFieldPathValue | 72 | value = new IntermediateFieldPathValue |
69 | { | 73 | { |
70 | BaseUri = baseUri, | 74 | BaseUri = (embeddedIndex == null) ? null : baseUri, |
71 | EmbeddedFileIndex = (int?)embeddedIndex, | 75 | EmbeddedFileIndex = (embeddedIndex == null) ? null : (int?)Convert.ToInt32(embeddedIndex), |
72 | Path = jsonData.GetValueOrDefault<string>("path"), | 76 | Path = jsonData.GetValueOrDefault<string>("path"), |
73 | }; | 77 | }; |
74 | } | 78 | } |
75 | 79 | ||
76 | var previousValueJson = jsonObject.GetValueOrDefault<JsonObject>("prev"); | 80 | var previousValueJson = jsonObject.GetValueOrDefault<JsonObject>("prev"); |
77 | var previousValue = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson); | 81 | var previousValue = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson, baseUri, type); |
78 | 82 | ||
79 | return new IntermediateFieldValue | 83 | return new IntermediateFieldValue |
80 | { | 84 | { |
@@ -97,10 +101,7 @@ namespace WixToolset.Data | |||
97 | { | 101 | { |
98 | var jsonData = new JsonObject(); | 102 | var jsonData = new JsonObject(); |
99 | 103 | ||
100 | if (pathField.BaseUri != null) | 104 | // pathField.BaseUri is set during load, not saved. |
101 | { | ||
102 | jsonData.Add("baseUri", pathField.BaseUri.AbsoluteUri); | ||
103 | } | ||
104 | 105 | ||
105 | if (pathField.EmbeddedFileIndex.HasValue) | 106 | if (pathField.EmbeddedFileIndex.HasValue) |
106 | { | 107 | { |