我们有一些配置文件是通过使用Json.net序列化C#对象生成的.
我们希望将序列化类的一个属性从简单的枚举属性迁移到类属性.
一个简单的方法是将旧的enum属性保留在类上,并在我们加载配置时安排Json.net读取此属性,但是当我们下次序列化对象时不要再次保存它.我们将分别从旧枚举中处理生成新类.
是否有任何简单的方法来标记(例如,使用属性)C#对象的属性,以便Json.net仅在序列化时忽略它,但在反序列化时要注意它?
我有一个AngularJS + MVC 5 + Web API 2应用程序,允许用户在浏览器中管理对象集合,并在单击"保存"按钮时立即提交所有更改.在进行更改时,会向JavaScript对象添加一个或多个属性:IsAdded,IsUpdated,IsRemoved.在服务器端检查属性以确定在持久化模型时要执行的操作.
该模型通过Web API使用Json.NET提供,基类为:
public class CollectionItemViewModel : ICollectionItem
{
public bool IsAdded { get; set; }
public bool IsUpdated { get; set; }
public bool IsRemoved { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但增加了我的序列化JSON.我可以选择不使用ShouldSerialize序列化这三个属性,但这也会阻止它们反序列化.
public bool ShouldSerializeIsAdded()
{
return false;
}
public bool ShouldSerializeIsUpdated()
{
return false;
}
public bool ShouldSerializeIsRemoved()
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用Json.NET反序列化,但不能序列化特定属性?
我有一个类定义如下的场景:
class MyObject
{
public DataDictionary MyObjectData { get; set; }
public bool ShouldSerializeMyObjectData() { return true; }
public bool ShouldDeserializeMyObjectData() { return false; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用JSON.net序列化/反序列化该类时,它会考虑ShouldSerialize,但不会考虑ShouldDeserialize.
根据文档,两者都应该像我猜的那样工作.有什么特别值得我知道的吗?更一般地说,我应该如何处理我想要序列化属性但不反序列化它的场景?
我正在使用,Json.NET 8.0如果这很重要.
谢谢你的帮助.
我一直在尝试以这样的方式序列化和反序列化我的对象,以便我能够指定要序列化但不反序列化某些属性。
示例代码如下:
public interface ISupYo
{
string Hi { get; }
}
public class SupYo : ISupYo
{
public string Hi { get; } = "heya";
}
public interface ISup
{
int hiyo { get; }
}
public class Sup : ISup
{
public Sup(int hiyo)
{
this.hiyo = hiyo;
}
public int hiyo { get; }
public ISupYo yo => new SupYo();
}
var myNewSup = JsonConvert.SerializeObject(new Sup(2));
var mySup = JsonConvert.DeserializeObject<Sup>(myNewSup);
Run Code Online (Sandbox Code Playgroud)
如果我从类中删除构造函数,Sup一切都很好。
但是由于 json.net 尝试构建接口 ISupYo,原样反序列化失败并出现以下错误... …