Tag:

在Serializable C#类中使用不带XmlArray的XmlArrayItem属性

我想用以下格式的XML: <configuration><!– Only one configuration node –> <logging>…</logging><!– Only one logging node –> <credentials>…</credentials><!– One or more credentials nodes –> <credentials>…</credentials> </configuration> 我想创build一个具有[Serializable]属性的类Configuration 。 要序列化凭证节点,我有以下几点: [XmlArray("configuration")] [XmlArrayItem("credentials", typeof(CredentialsSection))] public List<CredentialsSection> Credentials { get; set; } 但是,当我将它序列化为XML时,XML格式如下: <configuration> <logging>…</logging> <configuration><!– Don't want credentials nodes nested in a second configuration node –> <credentials>…</credentials> <credentials>…</credentials> </configuration> </configuration> 如果我删除[XmlArray("configuration")]行,我得到以下内容: […]

将Stream转换为String并返回…我们缺less什么?

我想序列化对象到string,并返回。 我们使用protobuf-net将一个对象转换成Stream并返回,成功。 但是,串stream和返回…不是那么成功。 在通过StreamToString和StringToStream ,新的Stream不会被protobuf-net反序列化; 它会引发一个Arithmetic Operation resulted in an Overflowexception的Arithmetic Operation resulted in an Overflow 。 如果我们反序列化原始stream,它就可以工作。 我们的方法: public static string StreamToString(Stream stream) { stream.Position = 0; using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { return reader.ReadToEnd(); } } public static Stream StringToStream(string src) { byte[] byteArray = Encoding.UTF8.GetBytes(src); return new MemoryStream(byteArray); } 我们的示例代码使用这两个: […]

什么是物化?

我知道Java使用擦除来实现参数化多态(generics)。 我明白什么是删除。 我知道C#通过实现实现参数化多态性。 我知道,可以让你写 public void dosomething(List<String> input) {} public void dosomething(List<Int> input) {} 或者你可以在运行时知道某些参数化types的types参数是什么,但我不明白它是什么。 什么是物化types? 什么是物化价值? 当一个types/值被通用时会发生什么?

序列化私有成员数据

我试图序列化一个对象到XML,它有一些属性,其中一些是只读的。 public Guid Id { get; private set; } 我已经标记了类[Serializable],我已经实现了ISerializable接口。 下面是我用来序列化我的对象的代码。 public void SaveMyObject(MyObject obj) { XmlSerializer serializer = new XmlSerializer(typeof(MyObject)); TextWriter tw = new StreamWriter(_location); serializer.Serialize(tw, obj); tw.Close(); } 不幸的是,这条消息在第一行就掉了下来。 InvalidOperationException未处理:无法生成临时类(结果= 1)。 错误CS0200:属性或索引器“MyObject.Id”不能被分配给 – 它是只读的 如果我将Id属性设置为public,则可以正常工作。 有人可以告诉我,如果我正在做什么,或者至less如果可能的话?

##预处理器运算符的应用程序有哪些,需要考虑?

正如我以前的许多问题所提到的,我正在通过K&R工作,目前正在进行预处理。 其中一个比较有意思的事情就是##预处理器操作符,这是我之前从来没有学过的东西,我从来没有知道过。 根据K&R: 预处理运算符##提供了在macros扩展期间连接实际参数的方法。 如果replace文本中的参数与##相邻,则将参数replace为实际参数,将删除##和周围的空白区域,并重新扫描结果。 例如,macrospaste连接它的两个参数: #define paste(front, back) front ## back 所以paste(name, 1)创build令牌name1 。 如何以及为什么有人在现实世界中使用它? 什么是它的使用的实际例子,有什么需要考虑的?