C++标准没有讨论float和double类型的底层布局,只讨论它们应该表示的值的范围.(对于签名类型也是如此,这是两个恭维还是别的)
我的问题是:用于以可移植方式序列化/反序列化POD类型(如double和float)的技术是什么?目前,似乎唯一的方法是将值表示为字面意义(如"123.456"),double的ieee754布局在所有体系结构上都不是标准的.
我想反序列化一个JSON字符串,该字符串不一定包含每个成员的数据,例如:
public class MyStructure
{
public string Field1;
public string Field2;
}
Run Code Online (Sandbox Code Playgroud)
假设我有一个实例:
Field1: "data1"
Field2: "data2"
Run Code Online (Sandbox Code Playgroud)
我反序列化一个字符串:
{ "Field1": "newdata1" }
结果应该是
Field1: "newdata1"
Field2: "data2"
Run Code Online (Sandbox Code Playgroud)
框架JavascriptSerializer和JSON.NET都在它们的反序列化方法中返回新对象,因此我可以想到直接执行此操作的唯一方法是将反序列化对象与使用反射的现有对象进行比较,这似乎是很多不必要的开销.理想情况下,某些软件会有一个方法,我传递一个现有的对象实例,只有那些存在于字符串中的成员才会得到更新.这里的要点是,我希望能够仅将已更改的数据传递给服务器,并更新现有对象.
是否可以使用这些工具中的任何一个,如果没有,有关如何解决问题的任何建议?
我通常在C#中编写代码的所有部分,在编写序列化的协议时,我使用FastSerializer快速高效地序列化/反序列化类.它也非常容易使用,并且非常直接地进行"版本控制",即处理不同版本的序列化.我通常使用的东西,看起来像这样:
public override void DeserializeOwnedData(SerializationReader reader, object context)
{
base.DeserializeOwnedData(reader, context);
byte serializeVersion = reader.ReadByte(); // used to keep what version we are using
this.CustomerNumber = reader.ReadString();
this.HomeAddress = reader.ReadString();
this.ZipCode = reader.ReadString();
this.HomeCity = reader.ReadString();
if (serializeVersion > 0)
this.HomeAddressObj = reader.ReadUInt32();
if (serializeVersion > 1)
this.County = reader.ReadString();
if (serializeVersion > 2)
this.Muni = reader.ReadString();
if (serializeVersion > 3)
this._AvailableCustomers = reader.ReadList<uint>();
}
Run Code Online (Sandbox Code Playgroud)
和
public override void SerializeOwnedData(SerializationWriter writer, object context)
{
base.SerializeOwnedData(writer, context);
byte serializeVersion = 4; …Run Code Online (Sandbox Code Playgroud) 我在客户端和Django服务器之间发送信息,我想使用JSON.我发送简单的信息 - 字符串列表.我试过用django.core.serializers,但是当我做的时候,我得到了
AttributeError: 'str' object has no attribute '_meta'
Run Code Online (Sandbox Code Playgroud)
看来这只能用于Django对象.如何序列化简单的Python对象?
当表单包含多个输入数组字段时,是否有更好的解决方案来转换已经由jQuery函数serialize()序列化的表单数据.我希望能够将表单数据转换为JSON对象以重新创建一些其他信息表.所以告诉我一个更好的方法来将序列化字符串转换为JSON对象.
<form id='sampleform'>
<input name='MyName' type='text' /> // Raf
<!--array input fields below-->
<input name='friendname[]' type='text' /> // Bily
<input name='fiendemail[]' type='text' /> // bily@someemail.com
<!--duplicated fields below to add more friends -->
<input name='friendname[]' type='text' /> // Andy
<input name='fiendemail[]' type='text' /> // Andy@somwhere.com
<input name='friendname[]' type='text' /> // Adam
<input name='fiendemail[]' type='text' /> // Adam@herenthere.com
</form>
Run Code Online (Sandbox Code Playgroud)
应用jquery方法获取数据
var MyForm = $("#sampleform").serialize();
/** result : MyName=Raf&friendname[]=Billy&fiendemail[]=bily@someemail.com&friendname[]=Andy&fiendemail[]=Andy@somwhere.com&friendname[]=Adam&fiendemail[]=Adam@herenthere.com
*/
Run Code Online (Sandbox Code Playgroud)
如何将此数据转换为JSON对象?它应该具有以下来自上述表单的示例JSON数据.
{
"MyName":"raf",
"friendname":[
{"0":"Bily"},
{"1":"Andy"},
{"2":"Adam"}
],
"friendemail":[
{"0":"bily@someemail.com"},
{"1":"Andy@somwhere.com"},
{"2":"Adam@herenthere.com"} …Run Code Online (Sandbox Code Playgroud) 我刚刚在Java中发现你可以声明一个字段'静态瞬态' - 编译器不会抱怨.这似乎没有任何用处,因为静态字段没有被序列化,我们都知道.
但我想知道,实际上是否存在"静态瞬态"字段有用的情况?
目前,我正在使用Jackson从我的基于Spring的Web应用程序发送JSON结果.
我遇到的问题是试图将所有货币字段输出为2位小数.我无法解决这个问题setScale(2),因为像25.50这样的数字被截断为25.5等
还有其他人处理过这个问题吗?我正在考虑使用自定义的Jackson序列化程序创建Money类...您可以为字段变量创建自定义序列化程序吗?你可能可以...但即使如此,我怎么能让我的客户序列化器将数字添加为2位小数的数字?
通常,我需要序列化一个对象,用于记录或调试.这是一个单向序列化 - 我不需要稍后将其取回,我只需要将一个对象转换为字符串以将其写入某处.
是的,是的 - 这就是为什么你应该总是覆盖这个ToString方法.我知道这个.但我经常处理我没有写的对象,也无法改变.另外,我不想为我编写的每个类编写和更新ToString方法.
XML序列化提供了一个看似完美的解决方案 - 只需将该对象压缩为XML.但是有很多限制,特别是你不能序列化IDictionary,你必须有一个无参数的构造函数.我可以在课堂上解决这些问题,但是 - 再次 - 我经常和其他人一起上课.
那么,获得对象的综合字符串表示的解决方案是什么?有什么简单的东西我错过了吗?
我正在尝试使用jQuery发送表单的数据.但是,数据无法到达服务器.你能告诉我我做错了什么吗?
<form id="contactForm" name="contactForm" method="post">
<input type="text" name="nume" size="40" placeholder="Nume">
<input type="text" name="telefon" size="40" placeholder="Telefon">
<input type="text" name="email" size="40" placeholder="Email">
<textarea name="comentarii" cols="36" rows="5" placeholder="Message"></textarea>
<input id="submitBtn" type="submit" name="submit" value="Trimite">
</form>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
<script type="text/javascript">
$(document).ready(function(e) {
$("#contactForm").submit(function() {
$.post("getcontact.php", $("#contactForm").serialize())
// Serialization looks good: name=textInNameInput&&telefon=textInPhoneInput etc
.done(function(data) {
if (data.trim().length > 0) {
$("#sent").text("Error");
} else {
$("#sent").text("Success");
}
});
return false;
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
和服务器端:
$nume = $_REQUEST["nume"]; // $nume contains no data. Also tried $_POST
$email = $_REQUEST["email"]; …Run Code Online (Sandbox Code Playgroud) 我知道SharedPreferences有putString(),putFloat(),putLong(),putInt()和putBoolean().但我需要存储一个对象,它是类型的Serializable在SharedPreferences.我怎样才能做到这一点?
serialization ×10
json ×4
c# ×2
java ×2
jquery ×2
.net ×1
android ×1
binary ×1
c++ ×1
django ×1
double ×1
field ×1
form-submit ×1
forms ×1
ieee-754 ×1
jackson ×1
javascript ×1
php ×1
portability ×1
python ×1
static ×1
transient ×1
versioning ×1