如果我正在序列化并稍后反序列化类,DataContractSerializer我如何控制未序列化的属性的初始值?
考虑下面的Person课程.它的数据协定设置为序列化FirstName和LastName属性,但不是IsNew属性.我想IsNew初始化为TRUE是否将新Person实例化为新实例或从文件反序列化.
这很容易通过构造函数来完成,但据我所知,它DataContractSerializer不会调用构造函数,因为它们可能需要参数.
[DataContract(Name="Person")]
public class Person
{
[DataMember(Name="FirstName")]
public string FirstName { get; set; }
[DataMember(Name = "LastName")]
public string LastName { get; set; }
public bool IsNew { get; set; }
public Person(string first, string last)
{
this.FirstName = first;
this.LastName = last;
this.IsNew = true;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个创建文件"目录"的应用程序,它可以归因于其他元数据文件,例如附件和缩略图.
我正在尝试将接口抽象到目录,以使目录的使用者不需要知道用于存储文件的基础文件系统.所以我创建了一个名为的接口IFileSystemAdaptor,如下所示.
public interface IFileSystemAdaptor:IDisposable
{
void WriteFileData(string fileName, Stream data);
Stream ReadFileData(string filename);
void DeleteFileData(string filename);
void ClearAllData();
void WriteMetaFileData(string filename, string path, Stream data);
Stream ReadMetaFileData(string filename, string path);
void DeleteMetaFileData(string filename, string path);
void ClearMetaFilesData(string filename);
}
Run Code Online (Sandbox Code Playgroud)
本质上,我的IFileSystemAdaptor接口公开了一个平面文件列表,也可以与其他元数据文件相关联.
正如您所看到的,我正在使用对通用Stream对象的引用来将接口抽象为文件的数据.这样,Catalog的一个实现可以从硬盘返回文件,而另一个实现可以从Web服务器返回数据.
现在我想弄清楚如何防止我的程序离开流.成员应关闭流的是否有经验法则?如果流的消费者关闭它,或者原始创建流的成员是否应该负责关闭它.
我正在使用visual studio 2010中的一个安装项目来为我正在处理的程序创建一个安装程序.我希望在我的设置中有自定义横幅图像以及添加删除程序中的自定义图标.
我已将这两个图像添加到我的安装程序的"应用程序文件夹"中,并且能够正确显示它们.但是,我的程序不是很大,只能安装为EXE和一些DLL.因此,对于我来说,"安装"的第4和第5个文件是仅在安装期间使用的图形,这似乎有点愚蠢.
有什么方法可以将这些图像嵌入到安装程序或我的其他项目中吗?
我正在努力更好地理解ASP.NET和ASP.NET MVC背后的" 管道 ".我一直在阅读这个页面,它帮助了很多.据我所知,到目前为止,每个ASP.NET站点都有一个继承自System.Web.HttpApplication的类.然后HttpApplication有一系列触发HttpModules和HttpHandlers的事件,如BeginRequest,AuthorizeRequest,End Request等...... HttpModules和HttpHandlers然后读写当前的HttpContext.
ASP.NET如何知道要使用的HttpApplication类?我的应用程序在Global.asax文件中具有典型的MvcApplication类.但我在这个类中没有看到任何与MVC有关的内容.我也没有看到任何将此类指定为"应用程序"的设置.ASP.NET是否总是寻找名为Global.asax的文件来确定要创建的HttpApplication类?或者ASP.NET只是在我的程序集中查找从HttpApplication继承的任何类?
另外,它如何知道要使用哪些模块和处理程序?我上面提到的页面说你在web.config中指定了处理程序和模块以及设置.但我的ASP.NET MVC应用程序在其web.config中没有这些设置?
如果我在我的一个操作方法中设置了一个断点并检查HttpContext.Current.ApplicationInstance.Modules,我会看到以下内容:
OutputCache
Session
WindowsAuthentication
FormsAuthentication
PassportAuthentication
RoleManager
UrlAuthorization
FileAuthorization
AnonymousIdentification
Profile
ErrorHandlerModule
ServiceModel
UrlRoutingModule-4.0
ScriptModule-4.0
__DynamicModule_System.Web.WebPages.WebPageHttpModuleDefaultAuthentication
Run Code Online (Sandbox Code Playgroud)
这些指定在哪里?同样,如果我检查HttpContext.Current.Handler,我可以看到它被设置为a System.Web.Mvc.MvcHandler.
我正在PropertyGrid通过实现自定义对象类型的显示方式ICustomTypeDescriptor.我允许用户创建自己的自定义属性,这些属性存储在单个键和值字典中.我能够PropertyDescriptors为这些值创建所有值并在属性网格中查看它们.但是,我还想显示所有默认属性,如果PropertyGrid通过反射填充而不是覆盖ICustomTypeDescriptor.GetProperties方法,则会显示这些属性.
现在我知道如何获取对象的类型,然后GetProperties(),但这会返回一个PropertyInfonot 数组ProperyDescriptor.那么如何PropertyInfo将该类型的对象转换为PropertyDescriptor对象以包含到我的集合中PropertyDescriptors?
//gets the local intrinsic properties of the object
Type thisType = this.GetType();
PropertyInfo[] thisProps = thisType.GetProperties();
//this line obviously doesn't work because the propertydescriptor
//collection needs an array of PropertyDescriptors not PropertyInfo
PropertyDescriptorCollection propCOl =
new PropertyDescriptorCollection(thisProps);
Run Code Online (Sandbox Code Playgroud) 我正在使用DataContractSerializer将我的类序列化/反序列化为XML.一切正常,但在某些时候,我想为这些XML文件的格式建立一个独立于实际代码的标准模式.这样,如果在序列化过程中出现问题,我总是可以返回并检查标准模式应该是什么.或者,如果我确实需要修改模式,则修改是一个明确的决定,而不仅仅是稍后修改我的代码的影响.
此外,其他人可能正在编写其他可能不是基于.NET的软件,需要从这些XML文件中读取.我希望能够为他们提供某种模式的文档.
DataContract和XSD架构之间是否存在某种关系.有没有办法将类中的DataContract属性导出为XSD架构?
声明在循环外部的循环中使用的变量而不是内部更好吗?有时我会看到在循环中声明变量的示例.这是否有效地导致程序在每次循环运行时为新变量分配内存?或者.NET足够聪明,知道它真的是同一个变量.
例如,请参阅此答案中的以下代码.
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
while (true)
{
int read = input.Read (buffer, 0, buffer.Length);
if (read <= 0)
return;
output.Write (buffer, 0, read);
}
}
Run Code Online (Sandbox Code Playgroud)
这个修改过的版本会更有效吗?
public static void CopyStream(Stream input, Stream output)
{
int read; //OUTSIDE LOOP
byte[] buffer = new byte[32768];
while (true)
{
read = input.Read (buffer, 0, buffer.Length);
if (read <= 0)
return;
output.Write (buffer, 0, read);
}
}
Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习ASP.NET.根据我的理解,ASP.NET与旧式ASP的不同之处在于,页面的逻辑代码存在于单独的文件中,而不是嵌入在ASP页面中.因此,当用户请求像ShoppingCart.aspx这样的页面时,服务器会在顶部读取指令...
<%@ Page Title="" Language="C#" MasterPageFile="~/Styles/Site.Master" AutoEventWireup="true"
CodeBehind="MyShoppingCart.aspx.cs" Inherits="TailspinSpyWorks.MyShoppingCart" %>
这告诉服务器文件中的哪个文件和哪个类与页面相关联.类后面的代码还具有与页面上的每个控件相对应的成员变量,并为代码隐藏文件中的代码提供了一种操作控件的方法.
首先,我是否正确理解这一点?
其次,一个站点是否可以设置两个具有相同命名控件的独立ASPX页面,这两个页面都有一个指向同一文件和类的指令?你想要这样做吗?两个页面可以具有相同的功能,但具有不同的布局.我认为这可能是一种创建单独的"桌面"和"移动"版本的页面的方法,而不会在代码隐藏文件中复制内容.
我想最终我想知道的是,是否有办法定义一个抽象页面?假设创建一个抽象页面定义,说明页面必须有控件"cart_list","total_lbl",但是然后能够有多个页面继承自这个抽象页面?
最近我一直在研究可用的基于.NET的ORM.我注意到每个人都会在一两个阵营中选址.在一个阵营中,首先创建数据库,ORM提供了一种更简单的方法来访问应用程序中的数据库.在第二阵营中,对象模型首先存在,ORM有助于将对象模型保存在数据库中.
现在我不是要求或断言一个阵营是否比另一个更好.我当然可以看到每种设计方法的原因.令我感到沮丧的是,我最近阅读的所有教程和"入门"文档都没有出现,并且在开头说"这个工具假设您从现有的数据库/对象模型开始".对我来说,这对于你是否会使用一个ORM而不是另一个来说非常重要.
因此,在做了一堆阅读并创建了几个"Hello World"项目之后,我已经在我所研究的ORM支持的工作流程上汇集了一系列要点.任何有这些工具经验的人都可以告诉我,我是否做了任何不正确的陈述,或完全错过了任何非常重要的观点.具体来说,我真的想知道我对数据库模式或对象模型是否应该首先使用每个工具的假设是正确的.
repo.Add<MyClass>(instance);<classname>.hbm.xml.net nhibernate linq-to-sql subsonic-active-record subsonic-simplerepository
我们在办公室工作的程序可以通过VBScript文件自动执行,但文件保存的扩展名为*.RVB,然后是*.VBS.我想使用Visual Studio作为我的编辑器/调试器,它正在工作.然而,如果打开*.VBS文件,它就不会像代码那样着色.
在工具 - >选项 - >文件扩展名下,我添加了"RVB"并将其编辑器设置为Microsoft Visual Basic,但它仍未对我的文件应用任何语法高亮显示.我错过了什么?
.net ×7
c# ×7
asp.net ×2
asp.net-mvc ×1
code-behind ×1
datacontract ×1
linq-to-sql ×1
loops ×1
nhibernate ×1
propertygrid ×1
propertyinfo ×1
schema ×1
stream ×1
xsd ×1