I have:
[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class AdDomainModel
{
[JsonConstructor]
public AdDomainModel(
Guid organizationId,
string domainName,
string adDomainConfiguration
)
{
AdDomainConfiguration = JObject.Parse(adDomainConfiguration);
DomainName = domainName;
OrganizationId = organizationId;
}
// Properties
public Guid OrganizationId
{
get; set;
}
public String DomainName
{
get;
}
public JObject AdDomainConfiguration
{
get;
}
}
private static readonly Guid OrganizationId = Guid.NewGuid();
private static readonly string DomainName = "some.domain";
private static readonly string AdDomainConfiguration = $@"
{{
""preferredDC"":""new.newdomain.name"",
""collectEnabledUsersOnly"":""true""
}}";
[TestMethod]
public void AdDomainModel_SerializationTest()
{
var _adDomainModel = new AdDomainModel( OrganizationId, DomainName, AdDomainConfiguration );
var serialized = JsonConvert.SerializeObject(_adDomainModel);
var deserialized = JsonConvert.DeserializeObject<AdDomainModel>(serialized);
Assert.AreEqual(_adDomainModel.DomainName, deserialized.DomainName);
Assert.AreEqual(_adDomainModel.AdDomainConfiguration, deserialized.AdDomainConfiguration);
Assert.AreEqual(_adDomainModel.OrganizationId, deserialized.OrganizationId);
}
Failing here:
var deserialized = JsonConvert.DeserializeObject<AdDomainModel>(serialized);
serialized variable during debugging:
{"organizationId":"14ca4438-abff-48cf-9b86-57492217b08e","domainName":"some.domain","adDomainConfiguration":{"preferredDC":"new.newdomain.name","collectEnabledUsersOnly":"true"}}
notice there is no quotation mark after "adDomainConfiguration": and this is cause a problem.
adDomainConfiguration is dynamic ie it can have different fields with different types.
I need it as an object not as a String in order to pass it as an object in API response:
There is a bug in the code. Since Newtonsoft.Json using a constructor to deserilize json, adDomainConfiguration input parameter should JObject, not a string
[JsonConstructor]
public AdDomainModel(
Guid organizationId,
string domainName,
JObject adDomainConfiguration
)
{
AdDomainConfiguration = adDomainConfiguration;
DomainName = domainName;
OrganizationId = organizationId;
}
and you have to init it this way
private static readonly Guid OrganizationId = Guid.NewGuid();
private static readonly string DomainName = "some.domain";
private static readonly string AdDomainConfiguration = @"
{
""preferredDC"":""new.newdomain.name"",
""collectEnabledUsersOnly"":""true""
}";
var _adDomainModel = new AdDomainModel(OrganizationId, DomainName,
JObject.Parse(AdDomainConfiguration));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.