Ich habe eine IP-Adresse, die ich als 4-Byte-Array in meinem Code haben muss. Allerdings möchte ich es in meiner JSON-Einstellungsdatei als eine Zeichenfolge speichern, die wie "192.168.0.1" formatiert ist. Dann würde ich auch gerne das Gegenteil machen und es deserialisieren.Serialize Byte-Array als Zeichenfolge
Ich möchte dies als das Ziel meiner Settings.json-Datei ist, dass es menschlich editierbar ist.
Gibt es eine Möglichkeit, das kann ich tun?
Ich bin mit dem Newtonsoft JSON Paket
Klasse I
public class Settings
{
public string PLCIP;
public byte[] RightTesterIP;
public byte[] LeftTesterIP;
}
Konverter Methoden, die ich schrieb am Serialisierung. Ich bin mir nicht sicher, wo ich sie umsetzen soll.
private string ConvertIPByteArraytoString(byte[] ip)
{
StringBuilder builder = new StringBuilder();
builder.Append(ip[0]);
for (int i = 1; i < ip.Length; i++)
{
builder.Append(".");
builder.Append(ip[i]);
}
return builder.ToString();
}
private byte[] ConvertIPStringToByteArray(string ip, string ParameterName)
{
var blah = new byte[4];
var split = ip.Split('.');
if (split.Length != 4)
{
//Log.Error("IP Address in settings does not have 4 octets.Number Parsed was {NumOfOCtets}", split.Length);
//throw new SettingsParameterException($"IP Address in settings does not have 4 octets. Number Parsed was {split.Length}");
}
for(int i = 0; i < split.Length; i++)
{
if(!byte.TryParse(split[i], out blah[i]))
{
//var ex = new SettingsParameterException($"Octet {i + 1} of {ParameterName} could not be parsed to byte. Contained \"{split[i]}\"");
//Log.Error(ex,"Octet {i + 1} of {ParameterName} could not be parsed to byte. Contained \"{split[i]}\"", i, ParameterName, split[i]);
//throw ex;
}
}
return blah;
}
Warum nicht die Klasse IPAddress verwenden? Es hat auch eine Parse-Methode: https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse(v=vs.110).aspx – Greg