我正在一个JSON驱动的项目中,我想为该SessionManager
对象提供一个动态的licensest列表。虽然我可以使用一组键值对来获得权限,但是我想知道是否可以删除属性名,以便
键 是Permission
值,而 值 是IsAllowed
值。
public class SessionPermission
{
public string Permission { get; set; }
public bool IsAllowed { get; set; }
}
public class SessionManager
{
public string UserName { get; set; }
public string Password { get; set; }
public List<SessionPermission> Permissions { get; set; }
public void SetPermissions()
{
Permissions = new List<SessionPermission>
{
new SessionPermission {Permission = "CreateUsers", IsAllowed = false},
new SessionPermission {Permission = "EditUsers", IsAllowed = false},
new SessionPermission {Permission = "EditBlog", IsAllowed = true}
};
}
}
当我生成JSON时,它输出一个权限数组:
{
"Permission": "CreateUsers",
"IsAllowed": false
},
我想知道如何覆盖序列化,以便它使用值而不是属性名称。
{
"CreateUsers": false
},
您可以使用以下自定义转换器:
public class SessionPermissionConverter : JsonConverter
{
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
var obj = (JObject)JObject.ReadFrom(reader);
JProperty property = obj.Properties().FirstOrDefault();
return new SessionPermission
{
Permission = property.Name,
IsAllowed = property.Value.Value<bool>()
};
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
SessionPermission permission = (SessionPermission)value;
JObject obj = new JObject();
obj[permission.Permission] = permission.IsAllowed;
obj.WriteTo(writer);
}
public override bool CanConvert(Type t)
{
return typeof(SessionPermission).IsAssignableFrom(t);
}
public override bool CanRead
{
get { return true; }
}
}
用法:
var manager = new SessionManager();
manager.SetPermissions();
string json = JsonConvert.SerializeObject(manager, new SessionPermissionConverter());
JSON示例:
{
"UserName": null,
"Password": null,
"Permissions": [
{
"CreateUsers": false
},
{
"EditUsers": false
},
{
"EditBlog": true
}
]
}
相反,它应该也可以正常工作。
示例: https :
//dotnetfiddle.net/mfbnuk
问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列
问题内容: 我需要反序列化一些JSON表示的JavaScript对象为适当的C#类。鉴于自动属性的出色功能,我宁愿将它们放在这些类中,而不是仅包含字段。不幸的是,.NET序列化引擎(至少默认情况下)完全忽略了反序列化的自动属性,而只关心背景字段,而该字段显然不在JavaScript对象中。 鉴于没有标准的方法来命名后备字段并且说实话,我什至不想使用“让我们创建一个看起来像具有C#后备字段的Java
我正在努力找出如何使用杰克逊将具有速记约定的 JSON 反序列化为 Java POJO。 这里的“类型”属性可以是字符串或对象。如果它是一个字符串,那么它被认为是具有默认属性的同一对象的简单简写形式。一、 上例中的1和2是等效的。 据我所知,可以为整个“类型”对象编写自定义反序列化器。据我所知,在这种情况下,我必须手动反序列化整个“类型”对象。但是我真的想只手动处理速记形式,并将正常处理委托给基于
问题内容: 我想要一种尽可能自动地将对象序列化和反序列化为JSON的方法。 序列化: 对我来说,理想的方式是,如果我在实例JSONSerialize()中调用,它将返回带有JSON对象的字符串,该对象具有该对象的所有公共属性。对于那些原始值,这很简单,对于对象,它应该尝试调用每个JSONSerialize()或ToString()或类似的东西来递归序列化所有公共属性。对于集合,它也应该正确运行(只
我想要一种将对象序列化和反序列化为JSON的方法,尽可能自动。 Serialize:对我来说,理想的方式是,如果我调用一个实例JSONSerialize(),它会返回一个带有JSON对象的字符串,该对象的所有公共属性都是< code >“name _ of _ property”:“value”。对于那些基本类型的值,这很简单,对于对象,它应该尝试在每个JSONSerialize()或ToStri
我使用的是JSON。NET来序列化连接到REST API的对象。我的对象中需要序列化为JSON的一个属性具有动态属性名。如果此属性的结构中包含的值是数值,则JSON属性为“type_id”,但如果此值为字符串值,则JSON属性名称为“type_code”。我试图为此使用自定义的,但在尝试序列化时,我收到了一条带有此消息的: "状态属性中的令牌属性名称将导致无效的JSON对象。路径"。" 下面是我的