我正在使用MonoTouch工作到一个iPhone项目,我需要序列化并保存一个属于ac#class的简单对象,其中CLLocation类型作为数据成员:
[Serializable]
public class MyClass
{
public MyClass (CLLocation gps_location, string location_name)
{
this.gps_location = gps_location;
this.location_name = location_name;
}
public string location_name;
public CLLocation gps_location;
}
Run Code Online (Sandbox Code Playgroud)
这是我的二进制序列化方法:
static void SaveAsBinaryFormat (object objGraph, string fileName)
{
BinaryFormatter binFormat = new BinaryFormatter ();
using (Stream fStream = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None)) {
binFormat.Serialize (fStream, objGraph);
fStream.Close ();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我执行这段代码时(myObject是上面类的一个实例):
try {
SaveAsBinaryFormat (myObject, filePath);
Console.WriteLine ("object Saved");
} catch (Exception ex) {
Console.WriteLine ("ERROR: " + ex.Message);
} …Run Code Online (Sandbox Code Playgroud) 一些背景资料.我在用;
每次我去编辑构建定义时,Visual Studio都会抛出错误,如下图所示.
团队基础错误
在程序集"Microsoft.TeamFoundation.Client,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"中键入"Microsoft.TeamFoundation.Client.BasicAuthCredential"未标记为可序列化
有关Visual Studio中显示的错误的屏幕截图,请单击此链接; 团队基础错误
tfs serializable build-definition visual-studio-2013 azure-devops
从这里开始,JGraphT 的Pair类是Serializable。但该类包含的实例成员(first和second)不是强制的Serializable。
当前的实现如下所示:
public class Pair<A, B>
implements
Serializable
Run Code Online (Sandbox Code Playgroud)
我认为应该是这样的:
public class Pair<A extends Serializable, B extends Serializable>
implements
Serializable
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?如果不是,那么为什么 JGraphT 不这样做呢?
更新 我已经构建了一个小示例并将所有代码添加到这篇文章中。我必须相信对此有答案/解释,并希望有人能告诉我我所缺少的东西。类型对象的类字段没有被转换,我不明白为什么。
这是我正在使用的模型类。
import 'package:json_annotation/json_annotation.dart';
part 'parent.g.dart';
@JsonSerializable()
class Parent {
int id;
final String name;
final int age;
List<Child> children;
Job job;
Parent({this.name, this.age, this.children, this.job});
factory Parent.fromJson(Map<String, dynamic> json) => _$ParentFromJson(json);
Map<String, dynamic> toJson() => _$ParentToJson(this);
}
@JsonSerializable()
class Child{
int id;
final String name;
final int age;
Child({this.name, this.age});
factory Child.fromJson(Map<String, dynamic> json) => _$ChildFromJson(json);
Map<String, dynamic> toJson() => _$ChildToJson(this);
}
@JsonSerializable()
class Job{
int id;
String title;
Job({this.title});
factory Job.fromJson(Map<String, dynamic> json) => _$JobFromJson(json);
Map<String, dynamic> …Run Code Online (Sandbox Code Playgroud) 我正在尝试json_serializable在 flutter 应用程序中为我的模型自动生成代码。
这是我的模型的示例:
import 'package:propro/src/models/product_model.dart';
import 'package:propro/src/models/user/address_model.dart';
import 'package:propro/src/models/user/membership_model.dart';
import 'package:propro/src/models/user/review_model.dart';
import 'package:propro/src/models/user/setting_model.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user_model.g.dart';
@JsonSerializable(explicitToJson: true)
class User {
final String uid;
final String email;
final String password;
final String firstName;
final String lastName;
final String gender;
final List<Address> addresses;
final List<Review> reviews;
final List<Product> wishlist;
final Membership membership;
final Setting setting;
User({
this.uid,
this.email,
this.password,
this.firstName,
this.lastName,
this.gender,
this.addresses,
this.reviews,
this.wishlist,
this.membership,
this.setting,
});
factory User.fromJson(Map<String, dynamic> json) => _UserFromJson(json);
Map<String, dynamic> toJson() …Run Code Online (Sandbox Code Playgroud) 伙计们,我有最简单的课,我想成为Parcelable.我是按照以下方式做的:
public class MyField implements Serializable, Parcelable
{
public MyField()
{
}
//************************************************
// Parcelable methods
//************************************************
public int describeContents() {return 0; };
public void writeToParcel(Parcel out, int flags)
{
out.writeInt(this.describeContents());
out.writeSerializable(this);
}
@SuppressWarnings("redundant")
public Parcelable.Creator<MyField> CREATOR
= new Parcelable.Creator<MyField>()
{
public MyField createFromParcel(Parcel in)
{
int description=in.readInt();
Serializable s=in.readSerializable();
switch(description)
{
case 0:
return (MyField )s;
default:
return null;
}
}
public MyField[] newArray(int size)
{
return new MyField[size];
}
};
}
Run Code Online (Sandbox Code Playgroud)
简单,嘿?是的,看起来像.但是当我尝试将我的类对象作为parcel对象发送到另一个活动时:
intent=new Intent(activity, SendMessageActivity.class);
MyField fld=new MyField(); …Run Code Online (Sandbox Code Playgroud) 在对我的上一个问题没有回答之后,我将这个问题重新表述为最简单的形式.1个按钮,1个clicklistener,1个可序列化对象和1个子程序,用于输出可序列化对象.此代码基于我在stackoverflow上找到的大约6-8个示例.但它仍然很简单它仍然会产生这个错误:W/System.err(228):java.io.NotSerializableException:serobj.testActivity所以我挑战你,哦,这么明智的代码大师:为什么这段代码会产生这个错误?最重要的是我该怎么做才能解决它?整个代码后跟log输出:
package serobj;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import ser.obj.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class testActivity extends Activity {
/** Called when the activity is first created. */
public class Tester implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public String frog;
public Tester(){
frog="frog";
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() …Run Code Online (Sandbox Code Playgroud) 这是一个Android应用程序,我需要通过蓝牙将Serializable对象(也称为BallPackage)发送到另一台设备.
由于这已经做了很多次,因此对象的大小有点紧密.当然,我可以轻松地将方法移动到另一个类,但如果它们在BallPackage类上,它会感觉更"有条理".
最重要的是,我担心向Serializable类/对象添加方法会增加其Serialized对应项,也会增加通过socket发送的包大小.这真的是个问题吗?
谢谢!
我是Java的新手,遇到了这个问题:我正在学习如何将对象状态保存到文件中,并且因为将数组传递给构造函数而陷入困境.我相信问题是构造函数的基类,但我不确定.
这是我的英雄课:
import java.io.Serializable;
public class Hero implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int power;
private String type;
private String[] wepons;
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String[] getWepons() {
return wepons;
}
public void setWepons(String[] wepons) {
this.wepons = wepons;
}
public Hero(int powerH, String …Run Code Online (Sandbox Code Playgroud) 虽然有一个名为的接口ISerializable,但似乎是为了在类型被标记为[Serializable]属性时自定义详细信息.如果我理解正确,[Serializable]属性本身不会触及它附加的类型上的任何内容,但在运行时实现的事情IFormatter确定给定对象是否标记[Serializble]属性(通过反射?我猜).IFormatter.Serializble()方法也只需要任何方法Object.这是否意味着几乎.NET中的每个对象都可以序列化?如果没有,是否有方法只接受可序列化的对象并在传递非序列化对象时产生编译时错误?
serializable ×10
android ×3
java ×3
flutter ×2
.net ×1
arrays ×1
azure-devops ×1
build-runner ×1
cllocation ×1
constructor ×1
dart ×1
ios ×1
jgrapht ×1
json ×1
parcelable ×1
sockets ×1
tfs ×1
type-safety ×1
xamarin.ios ×1