我正在寻找一种简单的方法来检查C#中的对象是否可序列化.
我们知道,通过实现ISerializable接口或将[Serializable]放在类的顶部,可以使对象可序列化.
我正在寻找的是一种快速检查方法,而无需反映类以获得它的属性.接口可以快速使用is语句.
使用@Flard的建议这是我提出的代码,尖叫是有更好的方法.
private static bool IsSerializable(T obj)
{
return ((obj is ISerializable) || (Attribute.IsDefined(typeof (T), typeof (SerializableAttribute))));
}
Run Code Online (Sandbox Code Playgroud)
或者甚至更好地获取对象的类型,然后在类型上使用IsSerializable属性:
typeof(T).IsSerializable
Run Code Online (Sandbox Code Playgroud)
请记住,这似乎只是我们正在处理的类,如果类包含其他类,您可能想要检查它们或尝试序列化并等待错误,如@pb指出的那样.
我想从Python中的文件/流中读取多个JSON对象,一次一个.不幸的是json.load(),.read()直到文件结束; 似乎没有任何方法可以使用它来读取单个对象或懒惰地迭代对象.
有没有办法做到这一点?使用标准库是理想的,但如果有第三方库,我会使用它.
目前我将每个对象放在一个单独的行上并使用json.loads(f.readline()),但我真的不想这样做.
import my_json as json
import sys
for o in json.iterload(sys.stdin):
print("Working on a", type(o))
Run Code Online (Sandbox Code Playgroud)
{"foo": ["bar", "baz"]} 1 2 [] 4 5 6
Run Code Online (Sandbox Code Playgroud)
$ python3.2 example.py < in.txt
Working on a dict
Working on a int
Working on a int
Working on a list
Working on a int
Working on a int
Working on a int
Run Code Online (Sandbox Code Playgroud) 我正在使用Hotaru CMS和图像上传插件,如果我尝试将图像附加到帖子,我会收到此错误,否则没有错误.
违规代码(错误指向**):
/**
* Retrieve submission step data
*
* @param $key - empty when setting
* @return bool
*/
public function loadSubmitData($h, $key = '')
{
// delete everything in this table older than 30 minutes:
$this->deleteTempData($h->db);
if (!$key) { return false; }
$cleanKey = preg_replace('/[^a-z0-9]+/','',$key);
if (strcmp($key,$cleanKey) != 0) {
return false;
} else {
$sql = "SELECT tempdata_value FROM " . TABLE_TEMPDATA . " WHERE tempdata_key = %s ORDER BY tempdata_updatedts DESC LIMIT 1";
$submitted_data = …Run Code Online (Sandbox Code Playgroud) 在Jackson中,当你用一个构造函数注释时@JsonCreator,你必须用它来注释它的参数@JsonProperty.所以这个构造函数
public Point(double x, double y) {
this.x = x;
this.y = y;
}
Run Code Online (Sandbox Code Playgroud)
成为这个:
@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
this.x = x;
this.y = y;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是必要的.你能解释一下吗?
有没有办法在C#中反序列化表达式,我想将表达式存储在数据库中并在运行时加载它们.
我有一个可以为空的int类?数据类型设置为序列化为xml元素.有没有办法设置它,所以如果值为null,xml序列化程序将不会序列化该元素?
我试图添加[System.Xml.Serialization.XmlElement(IsNullable = false)]属性,但我得到一个运行时序列化异常,说有一个反映类型的错误,因为"IsNullable可能不会设置为'false '对于Nullable类型.考虑使用'System.Int32'类型或从XmlElement属性中删除IsNullable属性."
[Serializable]
[System.Xml.Serialization.XmlRoot("Score", Namespace = "http://mycomp.com/test/score/v1")]
public class Score
{
private int? iID_m;
...
/// <summary>
///
/// </summary>
public int? ID
{
get
{
return iID_m;
}
set
{
iID_m = value;
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
上面的类将序列化为:
<Score xmlns="http://mycomp.com/test/score/v1">
<ID xsi:nil="true" />
</Score>
Run Code Online (Sandbox Code Playgroud)
但对于null的ID,我根本不需要ID元素,主要是因为当我在MSSQL中使用OPENXML时,对于看起来像的元素,它返回0而不是null
我有一个对象列表,我需要将其保存在我的计算机中.我已经阅读了一些论坛,我知道该对象必须是Serializable.但如果我能得到一个例子,那就太好了.例如,如果我有以下内容:
[Serializable]
public class SomeClass
{
public string someProperty { get; set; }
}
SomeClass object1 = new SomeClass { someProperty = "someString" };
Run Code Online (Sandbox Code Playgroud)
但是,如何object1在我的计算机中存储某个地方以后再检索?
.NET Framework附带了System.Runtime.Serialization.Json.DataContractJsonSerializer和System.Web.Script.Serialization.JavaScriptSerializer,它们都是对JSON进行de/serialize.我如何知道何时选择其中一种类型?MSDN没有说清楚它们的相对优势是什么.
我们有几个消耗或发出JSON的项目,到目前为止为每个项目选择的类依赖于每个项目的主要开发者的意见.有些很简单,有两个有关于从JSON生成托管类型的复杂逻辑(类型没有紧密地映射到流)但是没有强调速度,需要速度.没有与WCF交互,至少截至目前.
虽然我对其他图书馆感兴趣,但我希望有人也可以回答我的问题.
有没有办法使用Jackson JSON处理器进行自定义字段级序列化?例如,我想要上课
public class Person {
public String name;
public int age;
public int favoriteNumber;
}
Run Code Online (Sandbox Code Playgroud)
序列化为以下JSON:
{ "name": "Joe", "age": 25, "favoriteNumber": "123" }
Run Code Online (Sandbox Code Playgroud)
注意,age = 25被编码为数字而favoriteNumber = 123被编码为字符串.开箱即用杰克逊编组int了一个号码.在这种情况下,我希望favoriteNumber被编码为字符串.
json.net(newtonsoft)
我正在查看文档,但我找不到任何关于这个或最好的方法来做到这一点.
public class Base
{
public string Name;
}
public class Derived : Base
{
public string Something;
}
JsonConvert.Deserialize<List<Base>>(text);
Run Code Online (Sandbox Code Playgroud)
现在我在序列化列表中有Derived对象.如何反序列化列表并返回派生类型?