【问题标题】:How to serialize dynamic field names using JSON parser如何使用 JSON 解析器序列化动态字段名称
【发布时间】:2012-04-18 06:30:40
【问题描述】:

我正在使用 JSON.Net 序列化我的对象。例如,如果这是我的对象

Class MainData
{
   [JsonProperty("keyValues")]
   string val;
}

'val' 的数据是一个键值对字符串,例如 key1:value1。 我有一个场景,我不应该在我的最终序列化字符串中获得上面的“keyValues”名称,而是得到一个看起来像这样的序列化字符串

{
    "key1":"value1"
}

目前使用我的序列化程序我得到了这个,这不是我需要的

{
     "keyValues":"key:value1"
}

有人可以指导我使用任何文档/解决方案来动态分配字段名称,而不是使用对象内部定义的默认变量名称/JSONProperty 名称吗?

非常感谢。

【问题讨论】:

    标签: json.net json


    【解决方案1】:

    我整天都在为此苦苦挣扎,我所做的是使用字典对象并将其序列化 但是我有一条错误消息是“无法序列化字典”,应该阅读整个消息,“当键不是字符串或对象时无法序列化字典” 这现在对我有用,并给了我一个键/值对

    我有以下对象

    public class Meal {
    public int mealId;
    public int value;
    public Meal(int MealId, int Value) {
    mealId = MealId;
    value = Value;
    } }
    
    public class Crew
    {
    
    public Meal[] AllocatedMeals {
    get {
    return new Meal[]{ 
    new Meal(1085, 2),
    new Meal(1086, 1) }; } }
    
    public int AllocatedMealTotal {
    get {
    return this.AllocatedMeals.Sum(x => x.value); } }
    }
    

    然后是下面的代码

    Dictionary<string,string> MealsAllocated = crew.AllocatedMeals.ToDictionary(x => x.mealId.ToString(), x => x.value.ToString());
    
    return new JavaScriptSerializer().Serialize(
    new {
    Allocated = new {
    Total = crew.AllocatedMealTotal,
    Values = MealsAllocated } )
    

    得到

    "Allocated":{"Total":3,"Values":{"1085":"2","1086":"1"}}
    

    【讨论】:

    • 成功了!!!,我所要做的就是将'string val'变成'Dictionary val'。非常简单,感谢您的代码,它帮助我了解了这个想法。
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2015-06-03
    • 2020-04-22
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多