Skip to content

Commit 5430147

Browse files
blackspherefollowerqdot
authored andcommitted
Correcting the JSON deserialization for arrays
Fixes #176 by telling JSON.net to ignore null values Fixes #158 by changing the scope of the LogMessage field
1 parent 3c2c97c commit 5430147

2 files changed

Lines changed: 24 additions & 9 deletions

File tree

Buttplug.Client/ButtplugWSClient.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,21 @@ private async void onPingTimer(object state)
289289

290290
public async Task RequestDeviceList()
291291
{
292-
var deviceList = (await SendMessage(new RequestDeviceList(nextMsgId))) as DeviceList;
293-
if (deviceList.Devices == null)
292+
var resp = await SendMessage(new RequestDeviceList(nextMsgId));
293+
if (!(resp is DeviceList) || (resp as DeviceList).Devices == null)
294294
{
295+
if (resp is Error)
296+
{
297+
_owningDispatcher.Invoke(() =>
298+
{
299+
ErrorReceived?.Invoke(this, new ErrorEventArgs(resp as Error));
300+
});
301+
}
302+
295303
return;
296304
}
297305

298-
foreach (var d in deviceList.Devices)
306+
foreach (var d in (resp as DeviceList).Devices)
299307
{
300308
if (!_devices.ContainsKey(d.DeviceIndex))
301309
{

Buttplug.Core/Messages/Messages.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,14 @@ public Error(string aErrorMessage, ErrorClass aErrorCode, uint aId)
7676

7777
public class DeviceMessageInfo
7878
{
79+
[JsonProperty(Required = Required.Always)]
7980
public string DeviceName;
8081

82+
[JsonProperty(Required = Required.Always)]
8183
public uint DeviceIndex;
8284

83-
public string[] DeviceMessages;
85+
[JsonProperty(Required = Required.Always, NullValueHandling = NullValueHandling.Ignore)]
86+
public string[] DeviceMessages = new string[0];
8487

8588
public DeviceMessageInfo(uint aIndex, string aName, string[] aMessages)
8689
{
@@ -92,7 +95,8 @@ public DeviceMessageInfo(uint aIndex, string aName, string[] aMessages)
9295

9396
public class DeviceList : ButtplugMessage, IButtplugMessageOutgoingOnly
9497
{
95-
public readonly DeviceMessageInfo[] Devices;
98+
[JsonProperty(Required = Required.Always, NullValueHandling = NullValueHandling.Ignore)]
99+
public readonly DeviceMessageInfo[] Devices = new DeviceMessageInfo[0];
96100

97101
public DeviceList(DeviceMessageInfo[] aDeviceList, uint aId)
98102
: base(aId)
@@ -103,9 +107,11 @@ public DeviceList(DeviceMessageInfo[] aDeviceList, uint aId)
103107

104108
public class DeviceAdded : ButtplugDeviceMessage, IButtplugMessageOutgoingOnly
105109
{
110+
[JsonProperty(Required = Required.Always)]
106111
public string DeviceName;
107112

108-
public string[] DeviceMessages;
113+
[JsonProperty(Required = Required.Always, NullValueHandling = NullValueHandling.Ignore)]
114+
public string[] DeviceMessages = new string[0];
109115

110116
public DeviceAdded(uint aIndex, string aName, string[] aMessages)
111117
: base(ButtplugConsts.SystemMsgId, aIndex)
@@ -117,6 +123,7 @@ public DeviceAdded(uint aIndex, string aName, string[] aMessages)
117123

118124
public class DeviceRemoved : ButtplugMessage, IButtplugMessageOutgoingOnly
119125
{
126+
[JsonProperty(Required = Required.Always)]
120127
public uint DeviceIndex;
121128

122129
public DeviceRemoved(uint aIndex)
@@ -187,11 +194,11 @@ public RequestLog(string aLogLevel, uint aId = ButtplugConsts.DefaultMsgId)
187194

188195
public class Log : ButtplugMessage, IButtplugMessageOutgoingOnly
189196
{
197+
[JsonProperty(Required = Required.Always)]
190198
public ButtplugLogLevel LogLevel;
191199

192-
// Needs to be left in for serialization
193-
// ReSharper disable once UnusedAutoPropertyAccessor.Local
194-
private string LogMessage;
200+
[JsonProperty(Required = Required.Always)]
201+
public string LogMessage;
195202

196203
public Log(ButtplugLogLevel aLogLevel, string aLogMessage)
197204
: base(ButtplugConsts.SystemMsgId)

0 commit comments

Comments
 (0)