Tag: 序列化

使用StringReader与XmlNodeReader反序列化对象属性

为什么XmlSerializer在使用XmlNodeReader反序列化空类型元素而不是像使用StringReader (或XmlTextReader )时那样的空字符串时,用XmlNode数组填充我的对象属性? 以下代码示例中的第二个断言失败: var doc = new XmlDocument(); doc.Load(new StringReader(@” “)); var ser = new XmlSerializer(typeof (Test)); var reader1 = new StringReader(doc.InnerXml); var obj1 = (Test) ser.Deserialize(reader1); Debug.Assert(obj1.Value is string); var reader2 = new XmlNodeReader(doc.FirstChild); var obj2 = (Test) ser.Deserialize(reader2); Debug.Assert(obj2.Value is string); public class Test { public object Value { get; set; } […]

字节序列化C#中的结构的字节

我正在寻找C#中序列化的语言支持。 我可以从ISerializable派生并通过在字节缓冲区中复制成员值来实现序列化。 但是,我更喜欢像C / C ++那样的自动方式。 请考虑以下代码: using System; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace XBeeHelper { class XBee { [Serializable()] public struct Frame where FrameType : struct { public Byte StartDelimiter; public UInt16 Lenght; public Byte APIIdentifier; public FrameType FrameData; public Byte Checksum; } [Serializable()] public struct ModemStatus { public Byte […]

如果返回类型可能是Error或Success对象,如何反序列化XML

我正在使用基于XML的API,因为它的根节点可以返回SuccessResponse或ErrorResponse 。 我使用下面的方法来反序列化数据,但我不知道如何处理返回不是SuccessResponse 。 处理返回的XML不是预期格式的情况的最佳方法是什么? 我知道我可以做一个黑客的方式,并寻找SuccessResponse或ErrorResponse但感觉不对。 TheIconicApiResult result = this.apiService.SendGetRequest(“GetProducts”, new List() { new FilterParam(“live”), new LimitParam(5000) }); IXmlSerialiser xmlSerialiser = new XmlSerialiser(); var xmlBody = xmlSerialiser.ParseXML(result.ResponseBody); public TObject ParseXML(string xml) { using (TextReader reader = new StreamReader(GetMemoryStream(xml))) { XmlSerializer serialiser = new XmlSerializer(typeof(TObject)); return (TObject)serialiser.Deserialize(reader); } }

DataContractJsonSerializer的反序列化问题

我有以下JSON: [{ “name”: “numToRetrieve”, “value”: “3”, “label”: “Number of items to retrieve:”, “items”: { “1”: “1”, “3”: “3”, “5”: “5” }, “rules”: { “range”: “1-2” } }, { “name”: “showFoo”, “value”: “on”, “label”: “Show foo?” }, { “name”: “title”, “value”: “Foo”, “label”: “Foo:” }] 所有在一个行版本(适用于字符串文字): [{\”name\”:\”numToRetrieve\”,\”value\”:\”3\”,\”label\”:\”Number of items to retrieve:\”,\”items\”:{\”1\”:\”1\”,\”3\”:\”3\”,\”5\”:\”5\”},\”rules\”:{\”range\”:\”1-2\”}},{\”name\”:\”showFoo\”,\”value\”:\”on\”,\”label\”:\”Show foo?\”},{\”name\”:\”title\”,\”value\”:\”Foo\”,\”label\”:\”Foo:\”}] 在上面的示例中, name , value和label是必需的,但items和rules是可选的。 […]

Json.NET:反序列化嵌套字典

将对象反序列化为Dictionary ( JsonConvert.DeserializeObject<IDictionary>(json) )时,嵌套对象被反序列JObject s。 是否可以强制嵌套对象反序列化为Dictionary ?

JSON序列化列表<KeyValuePair >

我在Web API项目中使用了一个Dictionary,它像JSON中那样序列化: {“keyname”:{objectvalue},”keyname2:”…. 由于我有重复的键,我不能再使用Dictionary类型了,而现在我正在使用List<KeyValuePair>. 但这是以这种方式序列化: [{“Key”:”keyname”,”Value”:”objectvalue”}… 有没有办法让List序列化与字典相同? 谢谢。

将JSON反序列化为抽象类

我试图将JSON字符串反序列化为具体类,该类inheritance自抽象类,但我无法使其工作。 我用Google搜索并尝试了一些解决方案,但它们似乎也没有用。 这就是我现在拥有的: abstract class AbstractClass { } class ConcreteClass { } public AbstractClass Decode(string jsonString) { JsonSerializerSettings jss = new JsonSerializerSettings(); jss.TypeNameHandling = TypeNameHandling.All; return (AbstractClass)JsonConvert.DeserializeObject(jsonString, null, jss); } 但是,如果我尝试转换生成的对象,它就不起作用。 我不使用DeserializeObject的原因是我有很多具体的类 。 有什么建议? 我正在使用Newtonsoft.Json

Json.Net:将属性序列化/反序列化为值,而不是对象

在另一个类中使用时,如何实现Id类的以下JSON表示? class Car { public StringId Id { get; set; } public string Name { get; set; } } class StringId { public string Value { get; set; } } // ——————————————— // Desired representation { “Id”: “someId”, “Name”: “Ford” } // Default (undesired) representation { “Id” : { “Value”: “someId” }, “Name”: “Ford” }

如何使用Json.NET反序列化可以是两种不同数据类型的JSON属性

我正在使用Json.NET进行我正在进行的项目。 从外部API,我接收的JSON具有作为对象的属性,但是当它们为空时,传递“false”。 例如: data: { supplier: { id: 15, name: ‘TheOne’ } } 也可能是: data: { supplier: false } 我应该如何定义供应商属性,以便将供应商反序列化为Supplier对象或为null。 现在我有: public class Data { [JsonProperty(“supplier”)] public SupplierData Supplier { get; set; } } public class SupplierData { [JsonProperty(“id”)] public int Id { get; set; } [JsonProperty(“name”)] public string Name { get; set; } } […]

In和Out属性如何在.NET中运行?

我一直在尝试使用以下代码跨AppDomain边界序列化数组: public int Read(byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 作为猜测,在注意到其他地方的属性后,我用[In]和[Out]属性标记了方法的参数,这似乎导致参数的行为就好像它们是通过引用传递的一样。 例如: public int Read([In, Out] byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 在添加属性之前,从方法跨AppDomain边界返回后, buffer变量的内容丢失了。 类( SslStream )inheritance自MarshalByRefObject但未标记为Serializable属性。 这是使参数按值传递的唯一方法吗? 在序列化类时,这些属性是否被.NET以某种方式识别? 它们真的会导致参数通过引用传递,还是只是复制了内容?