标签: deserialization

发送/序列化对象的最佳实践

问题:开发人员创建自己的序列化格式有多常见?具体来说,我使用java本质上将对象作为带有标记的巨型字符串发送以分隔变量.

我的逻辑:我选择了这个,因为它几乎消除了语言依赖性(忽略了java的修改过的UTF-8),你也没有对象版本问题,如果使用java的序列化,接收端必须具有完全相同的版本对象,因此在旧版本上运行的客户端将无法接收任何对象数据.代码不是太难看,而且看起来还不错,但我想我的问题是这个实例的最佳实践是什么?这是个人项目.

其他已知的选择:好的,我只是在处理序列化一个对象以通过网络发送它并且遇到了谷歌协议缓冲区.序列化对象的标准化程度如何?我基本上有三种方法可以做到这一点.(我将在这里讨论java,因为这就是我所做的)1)使用语言的(java)本机序列化类2)使用你自己的方式序列化对象可能使用字符串和标记3)使用Protocol Buffers或一些其他已知的格式(JSON,XML等)

根据我的收集,你在串行化时基本上有3个主要目标:1)速度/效率/大小2)语言独立3)版本接受(在旧版本的代码仍然可以接受新版本的部分和副本反之亦然)

大多数大型软件项目使用协议缓冲区吗?如果您的客户端是资源少得多的移动设备,它会改变吗?

java serialization deserialization

0
推荐指数
2
解决办法
1558
查看次数

如果设置的值为null,如何将类中的字段设置为false?

我有以下内容:

var result2 = result1
          .Select((t, index) => new  {
             Answer = t.Answer,
             Answers = JSON.FromJSONString<Answer2>(t.AnswerJSON)
          });
          return Ok(result2);

    public class Answer2 {
        public bool? Correct; // Maybe this should be a property
        public bool Response; // Maybe this should be a property
    }
Run Code Online (Sandbox Code Playgroud)

我的String>对象函数:

    public static T FromJSONString<T>(this string obj) where T : class
    {
        if (obj == null)
        {
            return null;
        }
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj)))
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            T ret = (T)ser.ReadObject(stream); …
Run Code Online (Sandbox Code Playgroud)

c# json deserialization

0
推荐指数
1
解决办法
87
查看次数

运行时错误尝试反序列化空流

我正在尝试deserialize从文件中的字符串列表.在这里我的代码

FileStream filestream = new FileStream(@"D:\cache.bin", FileMode.OpenOrCreate);
try
{
    BinaryFormatter binformat = new BinaryFormatter();
    _cacheFileList = (List<string>)binformat.Deserialize(filestream);
}
catch (SerializationException ex)
{
    Console.WriteLine(ex.Message);
}
finally 
{
    filestream.Close();
}
Run Code Online (Sandbox Code Playgroud)

我收到运行时错误.尝试反序列化空流.

.net c# filestream deserialization

0
推荐指数
1
解决办法
5766
查看次数

使用DataContractJsonSerializer自定义DateTime序列化/反序列化

如何DateTime使用对象图中的DataContractJsonSerializer所有DateTime属性将默认的JSON 序列化/反序列化更改为自定义格式?

Json.Net库处理这个,但我不能在这个项目中使用它.

我试过IDataContractSurrogate但我无法访问DateTimes的值 - >字符串转换.

模型和预期的JSON是:

[DataContract]
public class Client
{
    [DataMember(Name = "id")]
    public int Id {get; set; }
    [DataMember(Name = "name")]
    public string Name {get; set; }
    [DataMember(Name = "contacts")]
    public IList<Contact> Contacts {get; set; }
    [DataMember(Name = "created")]
    public DateTime Created {get; set; }
    [DataMember(Name = "changed")]
    public DateTime Changed {get; set; }
}

[DataContract]
public class Contact
{
    [DataMember(Name = "name")]
    public string Name {get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# serialization json deserialization

0
推荐指数
1
解决办法
3809
查看次数

反序列化非标准字符串

我有一个看起来像一个数组的字符串: -

'[["hello","world"],["etc","etc..."]]'
Run Code Online (Sandbox Code Playgroud)

有没有办法'反序列化'即使它不是真正适当的序列化格式.

php deserialization

0
推荐指数
1
解决办法
36
查看次数

反序列化json对象不起作用

我想将我的json对象反序列化到我的学生班

var result = JsonConvert.DeserializeObject<Student>(data);
Run Code Online (Sandbox Code Playgroud)

我的json数据

{  
"student":{  
  "fname":"997544",
  "lname":"997544",
  "subject":"IT",
  "grade":"F"
}
}
Run Code Online (Sandbox Code Playgroud)

我的学生班

[Serializable]
public class Student
{
    [JsonProperty("fname")]
    public string FirstName{ get; set; }
    [JsonProperty("lname")]
    public string LastName{ get; set; }
    [JsonProperty("subject")]
    public string Subject { get; set; }
    [JsonProperty("grade")]
    public string Grade { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

代码不起作用,错误说:

无法将当前JSON对象(例如{"name":"value"})反序列化为类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化.

c# json deserialization

0
推荐指数
1
解决办法
3994
查看次数

Json.NET(反)序列化MailAddress

在查看了许多Google搜索和StackOverflow帖子后,我得出的结论是我可能会创建自己的转换器。但是,这对我来说是非常非常新的东西,我不确定我可以使用这些帖子中的哪些示例(如果有)。

我有这节课(实际课比这更复杂)

public class Person {
    [JsonProperty(PropertyName = "id")]
    public string PersonId { get; set; }

    [JsonProperty(PropertyName = "firstName")]
    public string PersonFirstName { get; set; }

    [JsonProperty(PropertyName = "email")]
    public MailAddress PersonEmail { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要序列化和反序列化以下json

{
    "id" : "abc123"
    , "firstName" : "John"
    , "email" : "john@doe.com"
}
Run Code Online (Sandbox Code Playgroud)

如何将MailAddress反序列化为string包含内容MailAddress.Address,反之亦然。

我得到的错误是:

无法将System.String强制转换或转换为System.Net.Mail.MailAddress

c# serialization json json.net deserialization

0
推荐指数
1
解决办法
608
查看次数

C#BinaryFormatter字节序

我正在使用二进制格式化程序来序列化我的对象。我想知道序列化字节数组中属性的顺序是什么(根据对象类中的属性顺序?是随机地?)并且是否可以根据道具控制字节的顺序。

例如,
如果我序列化以下obj:

public class Human
{
     int Age {get;set;}
     int Weight {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

如果要序列化,字节顺序是什么意思?(前4个字节代表年龄,下一个是权重吗?依此类推..或二进制格式化程序将其随机设置)

.net c# serialization binaryformatter deserialization

0
推荐指数
1
解决办法
504
查看次数

找到字符"&#016"时无法反序列化文本

我有一个.net应用程序尝试使用.net序列化程序反序列化字符串.但看起来我的序列化程序在文本中找到#016时失败了.

XML:

<MyMessage>
   <MyObjectMessage messageId="30_636529918974765415">
     <body>&#016</body>
   </MyObjectMessage> 
</MyMessage>
Run Code Online (Sandbox Code Playgroud)


C#代码:

var InvalidFile = @"C:\Users\jacjosep.ORADEV\Desktop\trial.xml";
ChatMessage responseMessage = null;
var chatSerilalizer = new XmlSerializer(typeof(MyObject));
using (FileStream fileStream = new FileStream(InvalidFile, FileMode.Open))
{
   using (StreamReader reader = new StreamReader(fileStream, Encoding.UTF8, true))
   {
      try
      {
         responseMessage = (chatSerilalizer.Deserialize(reader) as MyObject);
      }
      catch (Exception ex)
      { 
         throw ex;
      }

    }

}
Run Code Online (Sandbox Code Playgroud)

c# encoding control-characters deserialization

0
推荐指数
1
解决办法
51
查看次数

将JSON字符串反序列化为多个C#对象

我有一个以下格式的JSON字符串,我想将其反序列化为C#List.但是JSON中的记录号"1","2","3"(它可以高达1,2,3 ... n每次取决于json响应)限制我使用Newtonsoft将其反序列化为C#对象. JSON

{
"1":{
      "UID":"1",
      "LICENCENO":"licenseno",
      "NAME":"ABC"
    },
"2":{
      "UID":"2",
      "LICENCENO":"licenseno",
      "NAME":"PQR"
    },
"3":{
      "UID":"3",
      "LICENCENO":"licenseno",
      "NAME":"XYZ"      
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码进行反序列化

var result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DriverMaster>>(json);
Run Code Online (Sandbox Code Playgroud)

我将DriverMaster类创建为 -

public class DriverMaster
{
    public string UID { get; set; }
    public string LICENCENO { get; set; }
    public string NAME { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

反序列化线给未处理的异常,我知道我错在这样做的方式,因为DriverMaster JSON对象不能被提取到C#的情况下直接做一些记录数1,2,3 ... N在C#.有人可以帮我解决一下吗?提前致谢.

c# json json.net deserialization

0
推荐指数
1
解决办法
1463
查看次数