57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
using System;
|
|
using System.Runtime.Serialization;
|
|
|
|
namespace Umbraco.ModelsBuilder.Api
|
|
{
|
|
[DataContract]
|
|
public class ValidateClientVersionData
|
|
{
|
|
// issues 32, 34... problems when serializing versions
|
|
//
|
|
// make sure System.Version objects are transfered as strings
|
|
// depending on the JSON serializer version, it looks like versions are causing issues
|
|
// see
|
|
// http://stackoverflow.com/questions/13170386/why-system-version-in-json-string-does-not-deserialize-correctly
|
|
//
|
|
// if the class is marked with [DataContract] then only properties marked with [DataMember]
|
|
// are serialized and the rest is ignored, see
|
|
// http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization
|
|
|
|
[DataMember]
|
|
public string ClientVersionString
|
|
{
|
|
get { return VersionToString(ClientVersion); }
|
|
set { ClientVersion = ParseVersion(value, false, "client"); }
|
|
}
|
|
|
|
[DataMember]
|
|
public string MinServerVersionSupportingClientString
|
|
{
|
|
get { return VersionToString(MinServerVersionSupportingClient); }
|
|
set { MinServerVersionSupportingClient = ParseVersion(value, true, "minServer"); }
|
|
}
|
|
|
|
// not serialized
|
|
public Version ClientVersion { get; set; }
|
|
public Version MinServerVersionSupportingClient { get; set; }
|
|
|
|
private static string VersionToString(Version version)
|
|
{
|
|
return version?.ToString() ?? "0.0.0.0";
|
|
}
|
|
|
|
private static Version ParseVersion(string value, bool canBeNull, string name)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value) && canBeNull)
|
|
return null;
|
|
|
|
Version version;
|
|
if (Version.TryParse(value, out version))
|
|
return version;
|
|
|
|
throw new ArgumentException($"Failed to parse \"{value}\" as {name} version.");
|
|
}
|
|
|
|
public virtual bool IsValid => ClientVersion != null;
|
|
}
|
|
} |