[英]Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: [.
[英]Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing on JsonConvert.DeserializeObject after JsonConvert.SerializeObject
我有:
[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":"true "}}
注意“adDomainConfiguration”后面沒有引號:這是導致問題的原因。
adDomainConfiguration 是動態的,即它可以有不同類型的不同字段。
我需要它作為 object 而不是字符串,以便在 API 響應中將其作為 object 傳遞:
代碼中有一個錯誤。 由於 Newtonsoft.Json 使用構造函數對 json 進行反序列化,所以 adDomainConfiguration 輸入參數應該是 JObject,而不是字符串
[JsonConstructor]
public AdDomainModel(
Guid organizationId,
string domainName,
JObject adDomainConfiguration
)
{
AdDomainConfiguration = adDomainConfiguration;
DomainName = domainName;
OrganizationId = organizationId;
}
你必須以這種方式初始化它
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.