小编use*_*748的帖子

Json.NET:如何从生成的 json 字符串中的类型中删除程序集信息?

我正在使用 Json.NET 进行序列化,但结果字符串太长了,因为它包含大量关于我没有用的程序集的多余信息。

例如,这是我得到的其中一种类型:

"Assets.Logic.CompGroundType, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null": {
"$type": "Assets.Logic.CompGroundType, Assembly-CSharp",
"GroundType": 1,
"EntityID": 1,
"<GroundType>k__BackingField": 1
}
Run Code Online (Sandbox Code Playgroud)

“GroundType”是一个枚举,而“EntityID”是一个整数。

这是我想要的结果:

"Assets.Logic.CompGroundType" : {
"$type": "Assets.Logic.CompGroundType",
"GroundType": 1,
"EntityID": 1,
"<GroundType>k__BackingField": 1
}
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我还想删除“$type”字段,同时仍然正确地反序列化继承的类型(我不确定为什么有必要,因为该信息是从上面的一行复制的,但是如果我通过设置 TypeNameHandling 删除它.None,我收到子类型的反序列化错误)。我也不确定最后一个字段 (k__BackingField) 是做什么用的。

如果可能的话,我想进一步减少它:

"Assets.Logic.CompGroundType" : {
"GroundType": 1,
"EntityID": 1,
}
Run Code Online (Sandbox Code Playgroud)

我知道可以为 Json.Net 中的每种类型手动自定义序列化方案,但我有数百种类型,所以我想通过一些全局设置自动完成。

我尝试更改“FormatterAssemblyStyle”,但是那里没有“None”选项,只有“Simple”或“Full”,而且我已经在使用“Simple”。

在此先感谢您的帮助。

编辑:

重要的是要注意类型是字典中的键。这就是该类型出现两次的原因(在第一个示例的第一行和第二行)。

实现自定义 SerializationBinder 后,我能够减少“$type”字段的长度,但不能减少 Dictionary 键字段的长度。现在我得到以下信息:

"componentDict": {
      "Assets.Logic.CompGroundType, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null": {
        "$type": "Assets.Logic.CompGroundType",
        "GroundType": 1,
        "EntityID": 1,
        "<GroundType>k__BackingField": 1
      }
    }
Run Code Online (Sandbox Code Playgroud)

编辑2:

我试图序列化的代码是一个 …

.net c# serialization json json.net

7
推荐指数
1
解决办法
3041
查看次数

标签 统计

.net ×1

c# ×1

json ×1

json.net ×1

serialization ×1