【问题标题】:serialization shows only value kind and NOT the value序列化仅显示值类型而不显示值
【发布时间】:2022-05-16 16:45:40
【问题描述】:

我们有来自 3rd 方系统的数据,我有一个这样设计的课程,

 public class CollectionProperty
{
    public string Name { get; set; }
    public object Value { get; set; }
}

我的 VS 调试器说这样的值,它为我提供了数据类型的额外细节以及结果,

现在,当我使用 Newtonsoft 对其进行序列化时,

 var x = JsonConvert.SerializeObject(resultPacket);

它给出的输出只有值类型而不是值。

我需要带双引号的字符串值,不带双引号的数字值,怎么办?

[{"Name":"设备 ID","Value":{"ValueKind":3}}]},{"Name":"CPU0","CollectionProperties":[ {"Name":"CPU 负载百分比","Value":{"ValueKind":4}}]}]

【问题讨论】:

  • 不要使用对象作为属性类型。请改用您期望的类型,在本例中为 int。您发布的是 JSON,而不是整数。由于您明确写了您希望解析该有效负载,因此反序列化器返回了输入包含的内容,即 JToken

标签: c# serialization


【解决方案1】:

假设这是一个有效的传入 json,

[{"Name":"CPU Load Percentage","Value":{"ValueKind":4}}]

将您的班级更改为如下所示。您可以根据需要更改类/属性名称。 Json Attribute 是将您的属性与传入的 JSON 属性进行映射。 此外,如果您的传入 JSON 属性将来可以更改,您可以使用 dynamicJObject。如果不行,可以使用下面的代码:

        public class Value    {
            [JsonProperty("ValueKind")]
            public int ValueKind; 
        }
    
        public class SystemData{
            [JsonProperty("Name")]
            public string Name; 
    
            [JsonProperty("Value")]
            public Value Value; 
        }
    
//Your root class. 
        public class CollectionProperty{
           
            public List<SystemData> SystemDataList; 
        }

更新

由于您的 json 具有 [{}] 这意味着,它是一个数组或复杂对象的集合。 {} = class 看起来,有一个包含两个属性 Name 和 Value 的类列表,其中 Value 又是一个类或复杂对象,具有 int 类型的属性 ValueKind。

用法

CollectionProperty myDeserializedClass = JsonConvert.DeserializeObject<CollectionProperty>(myJsonResponse);

【讨论】:

  • 谢谢,但没有得到。你能否解释一下,如何设计我的CollectionProperty
  • Root 将被 CollectionProperty 替换
  • 我检查了这个。它即将为空
【解决方案2】:

我遇到了同样的问题,我发现的唯一方法是使用 System.Text.Json 进行序列化:

string json = System.Text.Json.JsonSerializer.Serialize(resultPacket);

在我的例子中,当使用动态对象和 expandoObject 时会出现 ValueKind 属性。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2018-11-27
    • 2018-02-17
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多