gpt4 book ai didi

c# - C# 中的 JSON.NET 反序列化导致空对象

转载 作者:太空狗 更新时间:2023-10-29 21:59:37 25 4
gpt4 key购买 nike

我正在尝试使用 JSON.NET 反序列化用数据填充 C# 对象 (ImportedProductCodesContainer)。

ImportedProductCodesContainer.cs:

using Newtonsoft.Json;

[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainer
{
public ImportedProductCodesContainer()
{

}

[JsonProperty]
public ActionType Action { get; set; }

[JsonProperty]
public string ProductListRaw { get; set; }


public enum ActionType {Append=1, Replace};
}

JSON 字符串:

{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}}

C#代码:

 var serializer = new JsonSerializer();
var importedProductCodesContainer =
JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument);

问题是 importedProductCodesContainer 在运行上面的代码后仍然是空的(Action = 0,ProductListRaw = null)。你能帮我找出问题所在吗?

最佳答案

您的 ImportedProductCodesContainer 级别过多。它正在创建一个新的 ImportedProductCodesContainer 对象(来自模板反序列化器),然后尝试在其上设置一个名为 ImportedProductCodesContainer 的属性(来自 JSON 的顶层),这将是一个包含其他两个值的结构。如果你只反序列化内部部分

{"ProductListRaw":"1 23","Action":"Append"}

那么您应该得到您期望的对象,或者您可以创建一个具有 ImportedProductCodesContainer 属性的新结构

[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainerWrapper
{
[JsonProperty]
public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; }
}

并用它来模板化你的反序列化器,然后你的原始 JSON 应该可以工作。

也可以使用该 JSON 库的其他属性/标志来更改此行为,但我不太了解它。

关于c# - C# 中的 JSON.NET 反序列化导致空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2972431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com