使用 NEWTONSOFT 仅在根级别序列化对象
Posted
技术标签:
【中文标题】使用 NEWTONSOFT 仅在根级别序列化对象【英文标题】:Serialize object just root level with NEWTONSOFT 【发布时间】:2022-01-12 11:30:06 【问题描述】:我有这样的课程:
public abstract class EntityBase
public long Id get; set;
public DateTimeOffset CreationTimeUtc get; set;
public DateTimeOffset? ModificationTimeUtc get; set;
public class State : EntityBase
public string Name get; set;
public IList<City> Cities get; set;
public class City : EntityBase
public string Name get; set;
public State State get; set;
public long StateId get; set;
所以,我创建了一个状态变量
var state = new State()
Name = "State 1",
CreationTimeUtc = DateTimeOffset.UtcNow,
Id = Sequence.Generator.Next(),
Cities = new List<City>()
new City()
Id = Sequence.Generator.Next(),
CreationTimeUtc = DateTimeOffset.UtcNow,
Name = "City 1"
;
当我使用NewTonSoft
序列化状态变量时,它会返回如下字符串:
"name":"State 1","cities":["name":"City 1","stateId":"265439108547260417","id":"265439108547260419","creationTimeUtc":1638876015097,"modificationTimeUtc":1638876015097],"id":"265439108547260417","creationTimeUtc":1638876015097,"modificationTimeUtc":1638876015097
我只想创建根对象,在这种情况下我需要忽略 Cities
属性。
我不能在 Cities
属性上使用 [JsonIgnore]
属性。
我想使用JsonSerializerSettings
或类似的东西来生成json字符串。
更新
我用这段代码生成json字符串
var jsonSerializerSettings = new JsonSerializerSettings()
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
;
Newtonsoft.Json.JsonConvert.SerializeObject(state, jsonSerializerSettings);
我该怎么做!? 谢谢
【问题讨论】:
为什么不能使用JsonIgnore
?
@LasseV.Karlsen 因为只是在这种情况下我想忽略这个属性,并不总是
我在您的 State 类中看不到 CreationTimeUtc 和 Id。您的代码无法编译。请贴出至少可以编译的真实代码。
检查这个 - ***.com/questions/45010583/…
您可以使用自定义合约解析器,如Serialize only simple types using Json.Net 所示。这是否回答你的问题?如果不能,您能否edit 澄清您需要哪些额外帮助?
【参考方案1】:
Json 只是一种在服务器之间移动数据的格式。它单独使用。要使用它,您需要反序列化它。随便用吧
var cities=state.Cities ;
state.Cities=null;
var json= JsonConvert.SerializeObject(state,Formatting.Indented,
new JsonSerializerSettings NullValueHandling = NullValueHandling.Ignore );
state.Cities=cities;
它在 Visual Studio 中进行了测试。这是json
"name": "State 1",
"id": "265439108547260417",
"creationTimeUtc": 1638876015097,
"modificationTimeUtc": 1638876015097
【讨论】:
以上是关于使用 NEWTONSOFT 仅在根级别序列化对象的主要内容,如果未能解决你的问题,请参考以下文章
Newtonsoft.Json.JsonSerializationException:'反序列化对象时出现意外标记:使用动态对象注释
使用 Newtonsoft Json 从流中反序列化多个 json 对象
您如何“真正”使用 Newtonsoft.Json 序列化循环引用对象?
如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象? [复制]