C# 将多个类序列化和反序列化为一个JSON对象?没有属性标记
我正在做一个项目,我一直在努力使代码尽可能模块化 我现在想将对象保存/加载到JSON,但是我不希望每个类都保存在数百个文件中,因为我希望JSON可读,并且用户可以在一个地方轻松编辑 为了举例说明,下面是C#的一个示例: 因此,如果我将其序列化,我希望得到的结果如下: {“aNumber”:0,“aString”:“你好,世界”,“isThisObjectNice”: 真的} 因此,对于编辑json的人来说,它看起来像是一个对象,但在代码中,它仍然是一系列高度分离的部分 同样重要的是,不要使用属性标记将JSON与代码分开。我希望使用ContractResolver或类似工具。假设“将JSON与代码分离”意味着您希望将域模型与任何JSON序列化问题分离,我认为这是一个好主意。最简单的方法是引入一个轻量级类,用于对输出进行建模,以及一个映射函数:C# 将多个类序列化和反序列化为一个JSON对象?没有属性标记,c#,json,serialization,json.net,deserialization,C#,Json,Serialization,Json.net,Deserialization,我正在做一个项目,我一直在努力使代码尽可能模块化 我现在想将对象保存/加载到JSON,但是我不希望每个类都保存在数百个文件中,因为我希望JSON可读,并且用户可以在一个地方轻松编辑 为了举例说明,下面是C#的一个示例: 因此,如果我将其序列化,我希望得到的结果如下: {“aNumber”:0,“aString”:“你好,世界”,“isThisObjectNice”: 真的} 因此,对于编辑json的人来说,它看起来像是一个对象,但在代码中,它仍然是一系列高度分离的部分 同样重要的是,不要使用属性
public class ModelOfWhateverJsonShouldLookLike
{
public float aNumber { get; set; }
public string aString { get; set; }
public bool isThisObjectNice { get; set; }
}
public static ToJsonModel(LinkingClass linkingObject, OtherLink otherLinkObject)
{
return new ModelOfWhateverJsonShouldLookLike
{
aNumber = linkingObject.aNumber, // otherLinkObject.aNumber?
aString = linkingObject.aString,
isThisObjectNice = otherLinkObject.isThisObjectNice
};
}
在序列化之前,您必须简单地调用映射函数,而不是序列化域对象
这种方法的优点是透明性和简单性:如果出现问题,很容易准确地看到正在序列化的内容并调试映射函数。使用更“神奇”的方法,例如ContractResolver,可能会用更大的对象保存一些样板文件,但当出现问题时,它会成为真正的痛苦(和时间杀手)
一个不相关的注意事项:我建议在C代码中坚持C命名约定,并使用大写字母命名公共属性:
IsThisObjectNice
。如果您绝对不想使用JsonProperty属性,然后你可以在模型中保留小写的属性名whateverjsonshouldlooklike
到目前为止你都做了些什么?@NielsNet目前我只是在用字符串构建json,这显然是非常混乱和难以维护的。在我看来,你的想法是错误的。如果您有一个要序列化的对象,那么最好有一个对linkinClass和OtherClass的引用。正如你提到的,你想把东西放在一起。我假设“让JSON与代码分离”是指让它与你的域模型分离?这是一个好主意,在您的情况下,最简单的解决方案是创建一个特殊的轻量级类,该类的外观与您希望JSON的外观完全相同,并手动将您的域对象映射到该类和从该类映射。顺便说一下,LinkingClass
中的linkedObject
可能与OtherLink
类中的linkedObject
不同-您如何选择要序列化的对象?
public class ModelOfWhateverJsonShouldLookLike
{
public float aNumber { get; set; }
public string aString { get; set; }
public bool isThisObjectNice { get; set; }
}
public static ToJsonModel(LinkingClass linkingObject, OtherLink otherLinkObject)
{
return new ModelOfWhateverJsonShouldLookLike
{
aNumber = linkingObject.aNumber, // otherLinkObject.aNumber?
aString = linkingObject.aString,
isThisObjectNice = otherLinkObject.isThisObjectNice
};
}