草庐IT

可变序列

全部标签

c# - 根据属性的运行时值选择性地序列化属性

从根本上说,我想根据序列化时的值从生成的Json中包含或省略属性。更具体地说,我有一个类型知道是否已为其分配了一个值,并且我只想序列化该类型的属性,如果已经被分配给它(所以我需要在运行时检查值)。我试图让我的API能够轻松检测“具有默认值”和“根本未指定”之间的区别。自定义JsonConverter似乎不够;我试过了,我相信属性名称在调用转换器之前已经序列化了。就我而言,我什至想省略属性名称。我研究过扩展DefaultContractResolver,但CreateProperty和CreateProperties(返回JsonProperty序列化元数据)仅采用被序列化的类型,因此我

c# - 如何告诉 XmlSerializer 始终使用 [DefautValue(...)] 序列化属性?

我正在使用DefaultValue属性来实现正确的PropertyGrid行为(它以粗体显示与默认值不同的值)。现在,如果我想使用XmlSerializer序列化显示的对象,那么在xml文件中将不会有具有默认值的属性的条目。告诉XmlSerializer序列化它们的最简单方法是什么?我需要它来支持“版本”,所以当我稍后在代码中更改默认值时-序列化属性获取它序列化的值,而不是“最新”值。我可以考虑以下内容:覆盖PropertyGrid的行为(使用自定义属性,因此它会被XmlSerializer忽略);执行自定义xml序列化,忽略DefaultValue;在将对象传递给XmlSeriaze

c# - Json.NET 序列化中有没有办法区分 "null because not present"和 "null because null"?

我在ASP.NETwebapi代码库中工作,我们在很大程度上依赖于通过JSON.NET自动支持将消息主体的JSON反序列化为.NET对象。作为为我们的一项资源构建补丁支持的一部分,我非常想区分JSON对象中不存在的可选属性与显式为null的同一属性。我的意图是将第一个用于“不要更改那里的内容”与“删除此内容”。有谁知道是否可以标记我的C#DTO,以便在它们被反序列化时JSON.NET可以告诉我它是哪种情况?现在它们只是作为null出现,我不知道为什么。相反,如果有人能想出一个更好的设计,不需要我这样做,同时仍然支持补丁动词,我很想听听你的建议。作为一个具体的例子,考虑将传递给put的这

c# - 为什么 System.Drawing Rectangle、Point、Size 等可变结构而不是类?

Microsoft决定制作这些结构有什么原因吗?这三个都是可变的。如果它们是不可变的或引用类型,我会发现它们更容易处理。如果有理由说它们必须是结构体,那么为什么它们是可变的? 最佳答案 为什么是结构体值语义这些值的两个相同实例之间没有本质区别。任何具有坐标[2,3]的Point都等于具有相同坐标的任何其他点,很像任何两个具有相似坐标的int值相等。这符合设计指南:Itlogicallyrepresentsasinglevalue,similartoprimitivetypes(integer,double,andsoon).性能Va

c# - XmlTextWriter序列化问题

我正在尝试创建一段xml。我用xsd.exe创建了数据类。根类是MESSAGE。因此,在创建了一个MESSAGE并填充了它的所有属性之后,我将它序列化如下:serializer=newXmlSerializer(typeof(Xsd.MESSAGE));StringWritersw=newStringWriter();serializer.Serialize(sw,response);stringxml=sw.ToString();到目前为止一切顺利,字符串xml包含有效(UTF-16编码)xml。现在我喜欢用UTF-8编码创建xml,所以我这样做:编辑:忘记包含流的声明seriali

c# - 使用 json.net 在序列化期间合并两个对象?

我遇到了如下情况,谁能帮我实现一下?例如,如果我有类(class):-publicclassSample{publicStringname{get;set;}publicMyClassmyclass{get;set;}}我的Myclass将如下所示:publicclassMyClass{publicStringp1{get;set;}publicStringp2{get;set;}}当我使用Json.net序列化Sample类的对象时,我得到如下结果并且运行良好。{"name":"...","myclass":{"p1":"...","p2":"..."}}它是正确的,但我想知道是否可

c# - .NET 4.5 中的序列化中断

我们有一个只发生在.NET4.5中的序列化问题-相同的代码在.NET4中工作正常。我们正在尝试用几个字段序列化一个继承类型,基类和继承类都用标记序列化属性。我们在Web服务的客户端得到一个异常,说服务器中有一个MethodAccessException,服务器本身没有抛出任何异常,这似乎是客户端序列化过程中的问题。请务必注意,我们是在.NET4中编译的,而不是.4.5更新:在实现ISerailize并忽略“Value”属性后,程序确实运行正常,但这意味着我们不得不放弃序列化该字段。任何帮助将不胜感激。谢谢,欧麦异常详情:System.Web.Services.Protocols.Soa

c# - 对象实体到 CSV 序列化/转换

如何在C#中将所有值(属性)写入csv格式的字符串?例如:classPerson(stringfirstName,stringlastName,int_age);Personperson=newPerson("Kevin","Kline",33);现在我想要一个字符串"Kevin;Kline;33"换句话说,我想将一个对象序列化为CSV 最佳答案 看看JoshClose's优秀CSVHelper图书馆varperson=newPerson("Kevin","Kline",33);using(varcsv=newCsvWriter(n

c# - 在 C# 中,值类型是可变的还是不可变的?

值类型的行为表明我们持有的任何值都不能通过其他变量更改。但我仍然对我在这篇文章的标题中提到的内容感到困惑。谁能解释一下? 最佳答案 值类型可以是可变的或(模数一些奇怪的边缘情况)不可变的,这取决于您如何编写它们。可变的:publicstructMutableValueType{publicintMyInt{get;set;}}不可变的:publicstructImmutableValueType{privatereadonlyintmyInt;publicImmutableValueType(inti){this.myInt=i;}

c# - 序列化时如何跳过xml声明?

我正在尝试输出一个没有xmlhead的xml文件我试过:Typet=obj.GetType();XmlSerializerxs=newXmlSerializer(t);XmlWriterxw=XmlWriter.Create(@"company.xml",newXmlWriterSettings(){OmitXmlDeclaration=true,Indent=true});xs.Serialize(xw,obj);xw.Close();但它仍然在xml文件中输出。我不想要弦乐技巧。有什么想法吗? 最佳答案 将Conformance