【发布时间】:2022-01-19 00:20:50
【问题描述】:
我有:
[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);
}
在这里失败:
var deserialized = JsonConvert.DeserializeObject<AdDomainModel>(serialized);
调试过程中的序列化变量:
{"organizationId":"14ca4438-abff-48cf-9b86-57492217b08e","domainName":"some.domain","adDomainConfiguration":{"preferredDC":"new.newdomain.name","collectEnabledUsersOnly" :"真"}}
注意“adDomainConfiguration”后面没有引号:这是导致问题的原因。
adDomainConfiguration 是动态的,即它可以有不同类型的不同字段。
我需要它作为对象而不是字符串,以便在 API 响应中将其作为对象传递:
【问题讨论】:
标签: c# json serialization