簡體   English   中英

轉換字典 <string,object> 到字典 <string,class> 在C#中

[英]Convert Dictionary<string,object> to Dictionary<string,class> in c#

我有一個Jtoken具有結構。 下面的結構比下面的結構具有更多的屬性,但是我只需要使用下面的結構

{{ "PersonId": 1234, "State": "Florida", "Gender": "Male", "Married ": 1, "SalaryUnderHundredDollar ": 1, }} 

我創建了一個類Person作為

public class Person
{
  public int PersonId {get;set;}
  public string State {get;set;}
  public string Gender {get;set;}
  public bool Married {get; set}
  public bool SalaryUnderHundredDollar {get;set}
}

我將上面的Jtoken轉換為字典:

var dict = jtoken.First.ToObject<Dictionary<string, object>>().ToDictionary(x => x.Key, x => x.Value);

這將提供Person的所有屬性,但我只需要上面的屬性。現在我必須轉換

     Dictionary<string,object> to Dictionary<string,class>

我正在執行以下操作:

 var dict2= dict.Where(x => fieldsRequired.Contains(x.Key)).ToDictionary(x => x.Key, x => (Person)x.Value);

fieldsRequired是我需要的字符串字段的列表,因為在Jtoken中有許多字段。

但是這種轉換不起作用。

有什么幫助嗎?

將您的班級修改為:

public class Person
{
  public int PersonId {get;set;}
  public string State {get;set;}
  public string Gender {get;set;}
  public int Married {get; set}
  public int SalaryUnderHundredDollar {get;set}
}

然后使用:

var person = jtoken.First.ToObject<Person>();

問題是bool屬性在JSON中表示為01 因此,我們也將類中的屬性類型也更改為int

更好的選擇是將JSON修復為truefalse而不是01 同樣很奇怪的是,JSON用雙花括號括起來,並且"Married ""SalaryUnderHundredDollar "屬性在末尾包含一個空格。 這些問題也應該得到解決。

您也可以編寫一個自定義JsonConverter以將值從01適當地轉換為bool 在這里查看答案

將建議放在一起並在屬性名稱中固定雙花括號和空格會導致以下結果:

public class BoolConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((bool)value) ? 1 : 0);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return reader.Value.ToString() == "1";
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(bool);
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string State { get; set; }
    public string Gender { get; set; }
    [JsonConverter(typeof(BoolConverter))]
    public bool Married { get; set; }
    [JsonConverter(typeof(BoolConverter))]
    public bool SalaryUnderHundredDollar { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        string json =
            @"{ ""PersonId"": 1234, ""State"": ""Florida"", ""Gender"": ""Male"", ""Married"": 1, ""SalaryUnderHundredDollar"": 1 }";

        var jObject = JObject.Parse(json);
        var person = jObject.ToObject<Person>();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM