ProtoBuf-net序列化IEnumerable

我正在尝试在我的项目中使用ProtoBuf-NET(它主要是Silverlight 4项目)。 我在序列化我的模型集合时遇到了困难,它们都是这样定义的: private List _itemsSet; public IEnumerable TSet { get {return _itemsSet;} set {_itemsSet = value == null ? new List() : new List(value);} } public void AddT(T item) { //Do my logic here _itemsSet.Add(item); } 更新:首先我不能序列化它 – No serializer defined for type: System.Collections.Generic.IEnumerable 1 [MyType]`。 其次,我想我将无法根据手动和protobuf-net源代码分析来绝对它。 有没有办法扩展protobuf-net以将代理提供给ProtoMemeber属性中的外部Add方法? 为什么使用ProtoMember(1, OverwriteList=true)不起作用? 它不是要覆盖集合而不应该关心Add()方法吗? 为什么它只是不尝试将此属性设置为T []或List或任何可分配给IEnumerable集合? 有没有办法提供自定义reflection机制来处理Silverlight中的私有字段,如:implementation: […]

如何检查字符串是否包含单个子串的出现?

我有这个: string strings = “abcdde”; 我需要类似于string.Contains()东西,但我不仅要知道字符串是否存在 (如果在字母上方),还要知道它是否仅存在一个单一时间 。 我怎样才能做到这一点?

Repeater或DataList中的复选框OnClick / ItemCommand

当在转发器控件中单击CheckBox时,我需要在转发器中的一行上执行一些服务器端逻辑。 有谁知道如何去做? 我看到它的方式你不能解雇项目命令,如果你使用CheckBoxes OnClick你不能得到转发器行。

在C#中使用DrawString对文本进行对齐

我在System.Drawing.Graphics对象上绘制文本。 我正在使用DrawString方法,文本字符串, Font , Brush ,边界RectangleF和StringFormat作为参数。 看看StringFormat ,我发现我可以将它的Alignment属性设置为Near , Center或Far 。 但是我还没有找到将其设置为Justified的方法。 我怎样才能做到这一点? 谢谢您的帮助!

为什么“Finalize方法不应该引用任何其他对象”?

我一直在思考为什么建议我们不要在finalize中释放托管资源。 如果您在http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx上看到代码示例,并搜索字符串“Dispose(bool disposing)在两个不同的场景中执行”并阅读评论,你会明白我的意思。 我能想到的唯一可能性是它可能与以下事实有关:无法预测终结器何时被调用。 有谁知道正确的答案? 谢谢,误导

WPF错误的KeyDown ASCII代码

我需要根据ASCII表获取键盘键的数值。由于WPF没有内置解决方案,我尝试了几种黑客攻击: 这个只给出大写的值。 char res ; Char.TryParse(e.Key.ToString(),out res); Debug.WriteLine((int)res); 2即使它在许多地方被列为可能的解决方案,但这个数字完全错误。 Debug.WriteLine(Convert.ToInt16(e.Key).ToString()); 那么如何从WPF输入中获取大写和小写字母ASCII代码? 更新 在这里得到几个答案后,我想强调一下我的问题。我绝对必须从输入中得到ASCII代码,无论是大写还是大写。没有硬编码字符比较或类似的东西。我正在寻找更通用的方法。

VS Code C# – System.NotSupportedException:没有数据可用于编码1252

我试图使用ExcelDataReader读取Ubuntu上的.xls文件。 我在C#中使用VS Code。 这是代码: var stream = File.Open(filePath, mode: FileMode.Open, access: FileAccess.Read); var reader = ExcelReaderFactory.CreateReader(stream); 我也试过这个: var reader = ExcelDataReader.ExcelReaderFactory.CreateBinaryReader(stream); 当我运行时,我得到以下exception: 未处理的exception:System.NotSupportedException:没有可用于编码的数据1252.有关定义自定义编码的信息,请参阅Encoding.RegisterProvider方法的文档。 在System.Text.Encoding.GetEncoding(Int32代码页) 我已经安装了libmono-i18n-west4.0-cil (也尝试使用libmono-i18n4.0-all ),因为我发现有人推荐这个,但问题仍然存在。 还安装了System.Text.Encoding.CodePages包,但没有成功。 谁能帮忙解决这个问题?

如何在服务层获取用户

我使用ASP.NET Core 2.1并希望在服务级别获取User 。 我看到HttpContextAccessor被注入某个服务然后我们通过UserManager获取当前User例子 var user = await _userManager.GetUserAsync(accessor.HttpContext.User); 或在控制器中 var user = await _userManager.GetUserAsync(User); 问题: 将HttpContextAccessor注入服务似乎是错误的 – 仅仅因为我们违反了SRP并且服务层没有被隔离(它依赖于http上下文 )。 我们当然可以在控制器中获取用户 (一种更好的方法),但我们面临两难 – 我们根本不想在每个服务方法中将User作为参数传递 我花了几个小时思考如何最好地实现它,并提出了一个解决方案。 我不完全确定我的方法是否足够,并且不违反任何软件设计原则。 共享我的代码希望从StackOverflow社区获得建议。 这个想法如下: 首先,我介绍注册为Singleton的SessionProvider 。 services.AddSingleton(); SessionProvider有一个Session属性,用于保存User , Tenant等。 其次,我介绍SessionMiddleware并注册它 app.UseMiddleware(); 在Invoke方法中,我解析了HttpContext , SessionProvider和UserManager 。 我取了User 然后我初始化ServiceProvider单例的Session属性: sessionProvider.Initialise(user); 在此阶段, ServiceProvider具有包含我们需要的信息的Session对象。 现在我们将SessionProvider注入到任何服务中,并且其Session对象已准备好使用。 码: SessionProvider : public class SessionProvider { public […]

数据到多维数组

有没有一种简单的方法将Datatable转换为多维字符串数组? 也许使用LINQ ? 除了手动循环遍历所有列/行之外,还有一种更好的方法…

使用byte作为主键数据类型

我正在使用entity framework代码优先。 我有一个表不会超过100行,我想使用数据类型byte (SQL Server中的tinyint )作为主键。 这是我到目前为止: [Key] public byte Id { get; set; } 问题是当Entity Framework创建数据库时,它没有设置允许行在插入时自动递增的标识规范属性。 如果我将数据类型更改为Int16 (SQL Server中的smallint ),一切都很完美。 有没有办法告诉entity framework设置自动增量属性,还是一个字节不能用作entity framework代码优先的主键?