我有一个类,当序列化时,我想作为一个没有键值对的字符串返回。字符串变为字符串。int变为int。如何使类变为字符串?
查看Data的合同和序列化,看起来这是不可能的。SeriezationInfo. addValue(名称,值)设置强制您的整个对象进入键值方法。我只想返回“A和B”。
[DataContract]
public class MyObject
{
public int A { get; set; }
public int B { get; set; }
}
例如,当使用DataContractJsonSerializer序列化时,我希望它是:
4 and 2
不
{
"A": 4,
"B": 2
}
假设我有一个使用这两种自定义类型的父类:
[DataContract]
public class Parent
{
[DataMember]
public MyObject One { get; set; }
[DataMember]
public MyObject Two { get; set; }
}
我想像这样序列化:
{
"One": "4 and 2",
"Two": "6 and 8"
}
相反,我似乎唯一能让它做到的是:
{
"One": {
"A": 4,
"B": 2
},
"Two": {
"A": 6,
"B": 8
}
}
唯一可行的解决方案是在 Parent 上添加自定义序列化,相应地设置 1 和 2,但我不想这样做,我希望我的新类在任何地方都序列化为字符串。
是否可以将类型序列化为单个返回值?还是除了 int 和 string 等内置类型之外的所有类型都必须序列化为对象?
我的回答:不能。
父类MyObject
必须实现ISerializable
来提供类本身的自定义序列化。这就把正确序列化类的责任放在了希望使用该类的每个类上,这是一种不受欢迎的体验,并突出了受支持的.NET自定义序列化程序策略中的严重设计缺陷。
[Serializable]
public class Parent : ISerializable
{
public MyObject One { get; set; }
public MyObject Two { get; set; }
public (SerializerInfo info, SerializerContext context)
{
string oneString = info.GetString("One");
One = new MyObject(oneString);
string twoString = info.GetString("Two");
Two = new MyObject(twoString);
}
public override void GetObjectData(SerializerInfo info, SerializerContext context)
{
info.AddValue("One", One.ToString());
info.AddValue("Two", Two.ToString());
}
}
咕噜咕噜...将此添加到 .NET 出错的一长串内容中。所有内容的静态/非接口类使框架默认情况下无法测试,而无需为所有内容创建 plug-n-chug 包装器。具有有损 MSIL/符号的编译器。我可以继续说下去。
您可以简单地添加一个 get 属性,该属性以您喜欢的任何方式将属性作为字符串返回......
public class MyObject
{
public int A { get; set; }
public int B { get; set; }
public string MyNewStringAttribute {
get{
return A + " and " + B;
}
}
}
然后,当您可以使用数组、linq 等中的新属性从控制器序列化时。
问题内容: 我有一堂课 并希望将其序列化为 如何实现此目标(以及如何反序列化为对象? 我正在尝试使用 但显然最终会引号过多。 也不起作用,因为它不能创建足够的报价。 问题答案: 我发现了一种使用JsonSerializer的方法: 本类需要了解这一点: 反序列化非常相似: 这也需要在Foo类上进行注释:
嗨,我正面临着地图序列化的问题,其中关键是一个自定义类。
我正在尝试将文件从mongoDB读取到本地。 我的代码如下:STRING=“myLocalPath”PATH=STRING.json 我得到错误-对象类型'ObjectId'是不是JSON序列化...请建议。
问题内容: 我有以下代码在引用时可在控制台应用程序中使用 当我更新对我的引用时,得到: 找不到play.api.libs.json.JsObject类型的Json序列化程序作为JsObject。尝试为此类型实现隐式OWrites或OFormat。 然后 val collection = db.collectionJSONCollection 我究竟做错了什么? 问题答案: ReactiveMong
问题内容: 我不清楚序列化/反序列化应该如何在JavaScript中的类型化对象上工作。例如,我有一个“ MapLayer”对象,其中包含各种成员和数组。我已经编写(但尚未测试)以下代码以尝试对其进行序列化: 我的问题是,如何将生成的对象反序列化为MapLayer对象而不是通用对象。以及如何将所有Sprite实例反序列化为sprite。我应该使用“ new MapLayer()”而不是“ {}”吗
我有一个看起来很常见的问题,但到目前为止,我还没有找到一个适合我的解决方案。我想我只是错过了一些小事情,但我已经崩溃了,请求帮助。我正在尝试使用flask和pymongo获得json输出。 以下是控制台中使用print(结果)的对象: 当我试图返回时,我得到了错误: TypeError: ObjectId类型的对象不是JSON可序列化的 类联系人(资源): 我试过bson。json_util建议。