[英]Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing on JsonConvert.DeserializeObject after JsonConvert.SerializeObject
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 _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"}} {"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”后面没有引号:这是导致问题的原因。
adDomainConfiguration is dynamic ie it can have different fields with different types. adDomainConfiguration 是动态的,即它可以有不同类型的不同字段。
I need it as an object not as a String in order to pass it as an object in API response:我需要它作为 object 而不是字符串,以便在 API 响应中将其作为 object 传递:
There is a bug in the code.代码中有一个错误。 Since Newtonsoft.Json using a constructor to deserilize json, adDomainConfiguration input parameter should JObject, not a string
由于 Newtonsoft.Json 使用构造函数对 json 进行反序列化,所以 adDomainConfiguration 输入参数应该是 JObject,而不是字符串
[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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.