使用newtonsoft c#进行反序列化和序列化

时间:2015-07-05 17:48:04

标签: c# json asp.net-mvc json.net

我的应用程序绑定了一个REST API,它将此返回给我:

{
    key: "XXXX-XXXX",
    fields: {
        customfield_10913: {
             value: "L2"
        }
    }
}

我正在使用Newtonsoft JSON进行序列化和反序列化,我创建了这些模型以使其工作:

public class Issue
{
    [JsonProperty("key")]
    public string Key { get; set; }

    [JsonProperty("fields")]
    public Fields Fields { get; set; }
}

public class Fields
{
    [JsonProperty("customfield_10913")]
    public CustomField Level { get; set; }
}

public class CustomField
{
   [JsonProperty("value")]
   public string Value{ get; set; }   
}

应用程序正在使用以下代码反序列化所有内容:

T model = JsonConvert.DeserializeObject<T>(result);

经过大量的业务逻辑后,我的WEB API应该返回一个新的JSON:

protected T Get()
{
    return model;
}

我已经拥有了我从其他API中读取的JSON。 那么,我需要什么?

  • 我需要阅读字段 CUSTOM_FIELDXXX ,但我无法在WEB API中使用此名称返回它。我怎么能读到这个字段,但是当我进行序列化时,它会假设另一个字段?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下功能

Issue model = deserializeObject<Issue>(result);

public T deserializeObject<T>(string result)
        {
            try
            {
                var settings = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented,
                    NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
                    DefaultValueHandling = DefaultValueHandling.Ignore
                };
                var items = (T)JsonConvert.DeserializeObject(result, typeof(T), settings);

                return items;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

            }

        }

答案 1 :(得分:0)

如果您的CustomField媒体资源可以拥有任何媒体资源名称,则可以将其序列化为Dictionary<string, CustomField>,如下所示:

public class Issue
{
    public Issue()
    {
        this.Fields = new Dictionary<string, CustomField>();
    }

    [JsonProperty("key")]
    public string Key { get; set; }

    [JsonProperty("fields")]
    public Dictionary<string, CustomField> Fields { get; set; }
}

然后,您可以为自定义字段使用任何字符串值。

工作fiddle