当实现ISerializable在C#中的接口,我们提供一个构造函数,需要一个SerializationInfo对象,然后用各种查询时GetInt32,GetObject为了填补对象的,我们正在尝试反序列化领域等方法.
实现此接口的一个主要原因,而不仅仅是使用[Serializable]属性,是为了向后兼容:如果我们在某个时刻向类中添加了新字段,我们可以捕获SerializationException序列化的旧版本的类,并处理他们以适当的方式.
我的问题如下:为什么我们必须将这些例外用于控制流程?如果我反序列化大量前一段时间保存的类,可能每个类中的每个缺失字段都会抛出异常,从而导致性能非常差.
为什么SerializationInfo类不提供TryGetValue只false在名称字符串不存在时才会返回的方法?
基本上我用C#等效于以下JavaScript语法:
var obj = {id: 1};
obj["prop1"] = 100;
obj["prop2"] = 200;
Run Code Online (Sandbox Code Playgroud)
是否可以动态地向C#对象添加属性并使用WebAPI控制器操作序列化为JSON?
我的C#对象:
public class MyObject
{
public int Id { get; set; }
public MyChildObject[] Chidren { get; set; }
public int this[string prop]
{
get { return Chidren.Single(x => x.PropertyName == prop).Value; }
}
}
public class MyChildObject
{
public string PropertyName { get; set; }
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想回到客户端的是:
{
id: 1,
prop1: 100,
prop2: 200
}
Run Code Online (Sandbox Code Playgroud)
此测试通过,但显然只是因为在运行时访问属性.但是,它们不是序列化的:
[TestMethod]
public void …Run Code Online (Sandbox Code Playgroud) 我想使用 ExpandoObjects 列表作为 Telerik 报告的数据源,但 Telerik 报告目前似乎不支持此功能。他们确实支持将 XML 作为数据源,所以我试图将我的 ExpandoObjects 列表转换为 XML 字符串。
我已经看到(在Can I serialize an ExpandoObject in .NET 4?),可以通过 jsonFx 通过这个(VB.net 代码,而不是 c#)将单个 ExpandoObject 序列化为 XML 字符串:
dim XMLwriter As New JsonFx.Xml.XmlWriter
dim serializedExpando as string = XMLwriter.Write(obj)
Run Code Online (Sandbox Code Playgroud)
或其等效的 c# 代码:
JsonFx.Xml.XmlWriter XMLwriter = new JsonFx.Xml.XmlWriter();
String serializedExpando = XMLwriter.Write(obj);
Run Code Online (Sandbox Code Playgroud)
如何将整个列表序列化为 XML 字符串?