aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/IntermediateFieldValue.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Data/IntermediateFieldValue.cs')
-rw-r--r--src/WixToolset.Data/IntermediateFieldValue.cs27
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 {