【发布时间】:2014-06-05 14:31:31
【问题描述】:
BinarySerializer 的输出字符串似乎太长。即使我将类的属性名称缩短为单个字符长度,它也不会改变。
这是类文件:
using System;
namespace Models.Accounts
{
/// <summary>
/// PasswordResetRequest class
/// model of a password reset request
/// </summary>
[Serializable]
public class PRR
{
/// <summary>
/// request id
/// </summary>
public string I { get; set; }
/// <summary>
/// time request received
/// </summary>
public DateTime T { get; set; }
/// <summary>
/// application to which the password belongs
/// </summary>
public string A { get; set; }
/// <summary>
/// username whose password needs to be reset
/// </summary>
public string U { get; set; }
/// <summary>
/// token (guid)
/// </summary>
public Guid G { get; set; }
/// <summary>
/// token used
/// </summary>
public bool D { get; set; }
/// <summary>
/// client ip
/// </summary>
public string C { get; set; }
}
}
我正在使用this SO link 进行序列化。当我将序列化程序用作
PRR request = new PRR();
request.U = "someusername";
request.G = Guid.NewGuid();
string searlizedRequest = SingletonCommon.Instance.SerializeObject(request);
searlizedRequest 的值很长,例如 AAEAAAD/////AQAAAAAAAAAMAgAAAEFMSVQuTW9kZWxzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAF0xJVC5Nb2RlbHMuQWNjb3VudHMuUFJSBwAAABI8ST5rX19CYWNraW5nRmllbGQSPFQ+a19fQmFja2luZ0ZpZWxkEjxBPmtfX0JhY2tpbmdGaWVsZBI8VT5rX19CYWNraW5nRmllbGQSPEc+a19fQmFja2luZ0ZpZWxkEjxEPmtfX0JhY2tpbmdGaWVsZBI8Qz5rX19CYWNraW5nRmllbGQBAAEBAwABDQtTeXN0ZW0uR3VpZAECAAAACgAAAAAAAAAACgYDAAAADHNvbWV1c2VybmFtZQT8////C1N5c3RlbS5HdWlkCwAAAAJfYQJfYgJfYwJfZAJfZQJfZgJfZwJfaAJfaQJfagJfawAAAAAAAAAAAAAACAcHAgICAgICAgL20za6r7D0QbKWb7tG1cjSAAoL
我可以使用任何输出较短的格式化程序或我可以尝试的其他任何东西,因为这个字符串将成为电子邮件中发送的链接的一部分。
【问题讨论】:
-
如果你想要一个小的结果,请改用 protobuf-net
-
我会将这些数据放入数据库中,然后向用户发送一个小密钥以获取该信息。
-
@jgauffin 感谢 - 现在尝试 protobuf-net(尽管对 .net 的持续支持持怀疑态度)。 usr - 好主意 - 谢谢你也会尝试 Sinatr - 不能使用 xml 或 json,因为这是一个密码重置链接,它将发送到用户的电子邮件。不应该容易解码
-
将属性转换为字段并为某些字段使用
[NonSerializable]属性,它将大小减少了近40%。现在还不错
标签: c# serialization