Tag: 反序列化

如何使用DataContractJsonSerializer反序列化字典?

我有以下型号: [DataContract] public class MessageHeader { private Guid? messageId; public Guid MessageId { get { if (messageId == null) messageId = Guid.NewGuid(); return messageId.Value; } } [DataMember] public string ObjectName { get; set; } [DataMember] public Dictionary Parameters { get; set; } // Can’t deserialize this [DataMember] public Action Action { get; set; } [DataMember] […]

如何干净地反序列化JSON,其中字符串值包装在同名对象中

我想将一些奇怪的JSON反序列化为C#类: { “Result”: { “Client”: { “ProductList”: { “Product”: [ { “Name”: { “Name”: “Car polish” } } ] }, “Name”: { “Name”: “Mr. Clouseau” }, “AddressLine1”: { “AddressLine1”: “Hightstreet 13” } } } } json2csharp为JSON生成以下类: public class Name { public string Name { get; set; } } public class Product { public Name Name […]

这可能在JSON中吗?

我目前正在使用json.net! 我知道如何反序列化json数据以及如何使用我们的类进行映射。 现在我渴望一些疑问! 假设我的jsonstrings是 “attributes”:{ “color”:”Brown”, “condition”:”Used”, “currency”:”USD”, “price”:”10500″, “price_display”:”$10,500″, } 和我的属性类( 我想在其上反序列化字符串 )是 Public class Attribute { public string name{ get; set; } public string value{ get; set; } } 现在我使用以下代码进行反序列化。 JavaScriptSerializer ser = new JavaScriptSerializer(); p = ser.Deserialize(jsonString); 显然,这段代码根本不适用于上面的jsonstring。 现在如何在一个类中绑定这些名称值对? 这可能吗 ? 将来,属性可能超过10但格式将与名称值对相同

在服务器上反序列化WCF消息

我实现了一个自定义消息检查器(通过IDispatchMessageInspector)来拦截在WCF服务的服务器端接收的消息,因此我可以尝试反序列化消息并应用一些特定的业务逻辑。 我遇到的问题是当我将MessageBuffer的内容写入新的MemoryStream然后尝试反序列化时,我收到一条错误,上面写着“根级别的数据无效。第1行,第1行”。 我知道传入的数据是有效的,因为跳过检查器可以使一切正常。 示例代码: public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) { MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); request = buffer.CreateMessage(); string msg = buffer.CreateMessage().ToString(); var dc = new DataContractSerializer(typeof(Adder)); using (var stream = new MemoryStream()) { buffer.WriteMessage(stream); stream.Position = 0; //deserializing error occurs here var c = dc.ReadObject(stream); } return null; } 这是Adder类/接口: [DataContract(Name […]

在Web.API控制器中自动反序列化为类似字符串的类

我有一个Web.API端点,它将这样的对象作为参数: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public UserName UserName { get; set; } } 例如: [Route(“api/person”)] [AcceptVerbs(“POST”)] public void UpdatePerson(Person person) { // etc. } (这只是一个例子 – 我们实际上并没有通过我们的Web.API端点接受用户名) 我们的UserName类是一个将string隐式运算符定义的对象,因此我们将它视为整个应用程序中string的处理方式。 遗憾的是,Web.API不会自动知道如何将相应的JavaScript Person对象反序列化为C# Person对象 – 反序列化的C# Person对象始终为null。 […]

XML文档(1,2)中存在错误,System.InvalidOperationException:未被预期

从API发送的XML 0 StringAccessToken StringAccessToken PolarisSampleUser 7 2013-05-27T16:57:46.323 响应类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; namespace PAPIAutomatedTestingTool { [XmlRoot(ElementName=”AuthorizationResult”)] public class AuthorizationResult { public int PAPIErrorCode { get; set; } public string ErrorMessage { get; set; } public string AccessToken { get; set; } public string […]

为什么JsonConvert.DeserializeObject不使用指定的JsonConverter?

我编写了一个自定义JsonConverter ,我可以将其分配给JsonSerializerSettings并使用JsonSerializerSettings的generics覆盖: var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All, Converters = new List() { new MyConverter() } }; var x = JsonConvert.DeserializeObject(input, settings); 序列化的Json也使用TypeNameHandling.All构建,因此它包含$type字段中的类型信息。 但是,在某些情况下,我不知道序列化了什么类型,并且想要使用DeserializeObject的非generics覆盖。 我期待的是,如果我使用相同的设置和/或转换器,并且Json包含类型信息,引擎将能够正确处理Json。 但似乎我的自定义转换器仅用于Json中的嵌套对象,而不是最高级别 – 尽管每个级别都有$type 。 我的问题是没有我的自定义转换器,我需要一个类的默认构造函数。 如果我实现它 – 仅用于测试 – 那么DeserializeObject确实返回正确的类型。 但这不是现实生活中的选择:除其他外,自定义转换器使用IOC容器解析所需的实例,然后填充它们。 我错过了什么或者我要求的根本不可能吗? 编辑:因为它是被请求的,下面是一些示例代码。 在这个示例中,反序列化在没有默认构造函数的情况下工作,显然另一个是使用空值(或default(T) )调用的。 但基本问题仍然存在:没有像我期望的那样使用ExampleConverter 。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; […]

如何通过容错来阅读无穷无尽的流

目前我正在开发一个应用程序,它从Twitter api读取流并将其解析为对象。 目前我读取了流并使用DataContractJsonSerializer中的ReadObject来创建我的对象。 这很棒!! 但是:我有点担心在我的程序赶上流程(互联网速度减慢或w / e)的情况下会发生什么,并且没有足够的数据来解析…该方法可能会引发exception,但我想等待新数据,然后重试相同的对象并继续。 此外,我想知道如何使方法更稳定,以防损坏的数据将进入流或类似的东西。 在此先感谢任何答案/想法:)

JSON.Net的反序列化返回’null’

我正在使用JSON.Net来反序列化JSON字符串。 JSON字符串是 string testJson = @”{ “”Fruits””: { “”Apple””: { “”color””: “”red””, “”size””: “”round”” }, “”Orange””: { “”Properties””: { “”color””: “”red””, “”size””: “”round”” } } } }”; 我的代码是 public class Fruits { public Apple apple { get; set; } public Orange orange { get; set; } } public class Apple { public string color { […]

将二维数组转换为对象c#

这一切都源于查询Google Analytics数据。 对于基本查询,更改的主要因素是维度和指标 。 返回的对象是一个名为GaData的类型,您需要的实际结果驻留在GaData.Rows中。 GaData.Rows的格式如下所示: 每个维度首先会有一行,在此示例中,“新访问者”有一行,“返回访问者”有第二行。 在这些行中,将包含另一组包含Dimension值的行,然后是您指定的每个度量标准(我只要求一个度量标准)。 到目前为止,我的课程设置如下: public class Results { public List Dimensions { get; set; } } public class Dimension { public string Value { get; set; } public List Metrics { get; set; } } public class Metric { public int Value { get; set; } } 最后,也许它刚刚晚了,我的大脑function不好,但我将这些数据转换为Results类型有点困难,我认为是因为多层。 有帮助吗? 编辑 […]