Tag: 序列化

JSON.NET – 如何为存储在数组/列表中作为对象类型的原始C#类型包括类型名称处理

我正在使用Newtonsoft JSON.NET为我序列化/反序列化。 但我有这个列表,其中它们是Object类型: var list = new List() { “hi there”, 1, 2.33 }; 当我将TypeNameHandling设置为TypeNameHandling.All序列化时,我希望它也会为列表中的每个实例提供$type ,但似乎不是这种情况。 这是实际输出: { “$type”: “System.Collections.Generic.List`1[[System.Object, mscorlib]], mscorlib”, “$values”: [ “hi there”, 1, 2.33 ] } 我需要这个原始类型具有特定的类型名称处理,因为如果我在列表中添加一个Int32值,并在反序列化后返回它,JSON.NET将其设置为Int64 。 这对我来说是一件大事,因为我试图调用一些方法并且这样做我需要比较参数,它们必须具有相同的类型。 有没有可以在JSON.NET中设置的方法或设置来实现我的需求? 我已经看过这篇文章,但它的作用是他试图改变默认行为并且总是返回Int32 ,这不是我正在寻找的。 任何帮助,将不胜感激。 谢谢

不可变类型作为配置属性

是否可以将不可变类型用作.NET配置API的配置属性? 假设我有一个名为MyClass的不可变类型: public class ImmutableClass { private readonly int value; public ImmutableClass(int value) { this.value = value; } public int Value { get { return this.value; } } } 我想在ConfigurationSection中使用此类型作为配置属性: public class MyConfigurationSection : ConfigurationSection { [ConfigurationProperty(“foo”)] public ImmutableClass Foo { get { return (ImmutableClass)base[“foo”]; } set { base[“foo”] = value; } } } 当我这样做时,我无法序列化和反序列化MyConfigurationSection,因为它会抛出此exception: […]

将C#对象转换为Json对象

我试图将C#对象序列化为Json对象。 然后将其提交给Salesforce API,并创建一个应用程序。 现在我将C#对象序列化为Json字符串,但我需要它作为一个对象。 这是我的C#对象以及伴随序列化。 Customer application = new Customer { ProductDescription = “gors_descr ” + tbDescription.Text, Fname = “b_name_first ” + tbFName.Text, Lname = “b_name_last ” + tbLName.Text }; var json = new System.Web.Script.Serialization.JavaScriptSerializer(); string jsonString = json.Serialize(application); string endPoint = token.instance_url + “/services/apexrest/submitApplication/”; string response = conn.HttpPost(endPoint, json, token); Literal rLiteral = this.FindControl(“resultLiteral”) […]

将XML反序列化为对象 – XML文档中存在错误(0,0)

我正在尝试从简单的XML文档读取元素值并将它们绑定到一个对象,但是我遇到了我的XML文档的问题。 我已经validation了它,并且可以确认文档本身没有问题,但扩展了结果: var nodes = from xDoc in xml.Descendants(“RewriteRule”) select xmlSerializer.Deserialize(xml.CreateReader()) as Url; 显示“XML文档中存在错误(0,0)” 内部exception读取 was not expected. 我不确定我在这里做错了什么? 我的XML如下: fromurl tourl 301 加载XML文件并尝试对其进行反序列化的代码: – public static UrlCollection GetRewriteXML(string fileName) { XDocument xml = XDocument.Load(HttpContext.Current.Server.MapPath(fileName)); var xmlSerializer = new XmlSerializer(typeof(Url)); var nodes = from xDoc in xml.Descendants(“RewriteRule”) select xmlSerializer.Deserialize(xml.CreateReader()) as Url; return nodes as UrlCollection; […]

WCF列表序列化/反序列化错误

我有以下ServiceContract和DataContract类: [ServiceContract] public interface IWcfService { [OperationContract] Response GetData(); } [DataContract] public class Response { [DataMember] public Dictionary Data { get; set; } } 当Response.Data字典的值为int,string,double或任何其他“简单”基元类型时,WCF可以成功序列化该对象。 但是当Response.Data字典的值为List 类型时,客户端在接收到数据并尝试反序列化时抛出以下exception: Message=The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:GetDataResult. The InnerException message was ‘Error in line […]

重命名字段,然后在C#中反序列化

我将数据存储在已使用.net BinaryFormatter序列化的类的实例中。 我现在想要重命名该类中的一个字段,但仍然能够反序列化旧数据。 一种选择是手动实现ISerializable并反序列化该类的所有字段。 但这似乎很多工作,特别是如果我的class级有很多字段而且我只重命名了一个字段。 有没有更好的办法? Craig建议保留旧类的副本以进行反序列化,并将值复制到新类。 我在其他地方也看到了这个建议 – 这对实现ISerializable有什么好处? 据我所知,复制该类会给我留下2个几乎相同的类副本,而且我仍然需要将旧类中的所有值复制到新类中 – 这似乎与使用ISerializable实现ISerializable相同。几乎重复的类投入混合。 两个答案提到了宾德斯。 我已成功使用SerializationBinder反序列化一个类序列为Bar Foo类,但这是因为类的名称已更改。 当你重命名一个字段时,SerializationBinder是否也有帮助 – 例如当int m_Left被重命名为int m_Right时?

如何使用XmlSerializer反序列化为现有实例?

是否有可能使用XmlSerializer将其数据反序列化为现有的类实例而不是新的实例? 这在两种情况下会有所帮助: 轻松将两个XML文件合并到一个对象实例中。 让object constructer本身就是从XML文件加载数据的人。 如果默认情况下不可能,它应该使用reflection(在反序列化后复制每个属性),但这将是一个丑陋的解决方案。

如何在不使用临时文件的情况下将.NET对象序列化为Azure Blob存储?

我想将.NET对象存储到Azure Blob存储中。 目前我使用TextWriter将其序列化为XML文件( episodeList是我想要序列化的对象): XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes Xmlattr = new XmlAttributes(); Xmlattr.XmlRoot = new XmlRootAttribute(“EPISODES”); overrides.Add(typeof(List), Xmlattr); XmlSerializer serializer = new XmlSerializer(typeof(List), overrides); TextWriter textWriter = new StreamWriter(@”C:\movie.xml”); serializer.Serialize(textWriter, episodeList); textWriter.Close(); 然后将文件上传到Blob存储: CloudBlobClient blobStorage = createOrGetReferenceOfBlobStorage(folderName); string uniqueBlobName = string.Format(“{0}/{1}”, folderName, fileName); CloudBlockBlob blob = clouBblockBlobPropertySetting(blobStorage, uniqueBlobName, “.txt”); using (StreamWriter writer = […]

在asp.net中序列化会话状态

我正在尝试在我们的nopcommerce 1.9安装中将会话状态存储在SQL而不是InProc中。 当我对web.config进行必要的更改时,我收到此错误: ‘/’应用程序中的服务器错误。 无法序列化会话状态。 在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。 如果自定义会话状态存储在“自定义”模式下执行类似的序列化,则适用相同的限制。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.Web.HttpException:无法序列化会话状态。 在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。 如果自定义会话状态存储在“自定义”模式下执行类似的序列化,则适用相同的限制。 来源错误: 在执行当前Web请求期间生成了未处理的exception。 可以使用下面的exception堆栈跟踪来识别有关exception的起源和位置的信息。 堆栈跟踪: [SerializationException:在程序集’Nop.BusinessLogic中输入’NopSolutions.NopCommerce.BusinessLogic.Categories.Category’,Version = 1.9.0.0,Culture = neutral,PublicKeyToken = null’未标记为可序列化。 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)+9449041 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type,StreamingContext context)+247 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()+160 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType,ISurrogateSelector surrogateSelector,StreamingContext context,SerObjectInfoInit serObjectInfoInit,IFormatterConverter converter,SerializationBinder binder)+ 371 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo,NameInfo memberNameInfo,WriteObjectInfo memberObjectInfo)+205 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo,NameInfo memberNameInfo,NameInfo typeNameInfo)+651 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph,Header [] inHeaders,__BinaryWriter serWriter,Boolean fCheck)+444 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream,Object graph, Header […]

C#Xml-使用IXmlSerializable对派生类进行序列化

我有一个与XML序列化兼容的基类和一个实现IXmlSerializable的派生类。 在此示例中,基类确实实现了IXmlSerializable: using System.Diagnostics; using System.Text; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; namespace XmlSerializationDerived { public class Foo { public int fooProp; public XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader reader) { fooProp = int.Parse (reader.ReadElementString (“fooProp”)); } public void WriteXml(XmlWriter writer) { writer.WriteElementString (“fooProp”, fooProp.ToString ()); } } public class Bar : […]