【问题标题】:How to generate a Dictionary<> object in c#如何在 C# 中生成 Dictionary<> 对象
【发布时间】:2014-04-28 13:34:12
【问题描述】:

我想创建一个 Dictionary 对象,并且该字典对象应该包含 名称和值属性。例如:

Dictionary<string,object> dict = new Dictionary<string,object>();

当我将该字典序列化为 json 字符串时,它应该像这样访问:

dict[0]["name"]=="ProductName"; //property name
dict[0]["value"]=="product1";   // value

dict[1]["name"]=="Description"; //property name
dict[2]["value"]=="product1 desc";   // value

............................

但我没有办法。谁能建议我如何做到这一点?

编辑:-

实际上,我从 Ajax 帖子中获取 json 字符串,如下所示:-

var str ="{"name":"firstName","value":"john"}",

一旦我得到它,我就会以以下格式反序列化该字符串:-

var dictDynamic = sear.Deserialize<dynamic>(str);

结果我得到了这样的属性:

dictDynamic[0]["name"]

这样的属性值:-

dictDynamic[0]["value"]

但问题是现在我想在服务器端执行此操作。意思是想要生成上述 json 字符串格式的模型字符串,然后想要以上述方式反序列化。

【问题讨论】:

  • 使用像JSON.NET这样的Json解析器

标签: c# json dictionary


【解决方案1】:

字典不允许您拥有两个具有相同值的键。所以0 作为键不起作用。

最好的办法可能是创建一个对象来保存您的信息。

public class Product
{
    public string ID {get;set;}
    public string Name {get;set;}
    public string Value {get;set;}
}

然后创建一些对象。

Product product=new Product();
product.ID="0";
product.Name="My Super Widget";
product.Value="500";
//Then add that product to the dictionary.
Dictionary<string, Product> products=new Dictionary<string, Product>();
products.Add(product.ID, product);
//then you can access it in this way
products["0"].Name; //the value of this is "My Super Widget"

想要将其序列化为 JSON?让我们使用JSON.Net

string json=JsonConvert.SerializeObject(products);

【讨论】:

  • ,我想通过这种方式访问​​数据 str[0]["name"] 和 str[0]["value"] 在去串行化之后。其中“name”是属性名称和“ value" 是该属性的值。不需要使用 Dictionary。
  • @Pawan 您的问题专门询问如何在 C# 中创建字典,然后如何将其序列化为 JSON 字符串。不幸的是,您发布的用于访问结果对象的语法无效。而且您没有提供任何描述为什么要以这种方式访问​​对象的内容。也许您应该更新问题以清楚地解释您要实现的目标。
  • ,我已经更新了我的问题。由于应用程序的旧结构,我想这样做。我无法更改它。
【解决方案2】:

你可以使用JSON.NET:

string json = JsonConvert.SerializeObject(dict);

但你需要有一个有效的字典和可序列化的值。例如:

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
dict["0"] = product;

【讨论】:

  • ,我的问题是当我对字符串进行反序列化时,我得到了“Key”和“Value”,但根据旧代码我需要“name”而不是“Key”。那么我们该怎么做那个?
  • 对不起,我不明白。您能否扩展您的问题并进一步解释一下,您到底想做什么?
【解决方案3】:
var myDict = new Dictionary<string, Dictionary<string, string>>();

var innerDict = new Dictionary<string, string>();
innerDict.Add("name", "name 0");
innerDict.Add("value", "value 0");

myDict.Add("0", innerDict);

innerDict = new Dictionary<string, string>();
innerDict.Add("name", "name 1");
innerDict.Add("value", "value 1");

myDict.Add("1", innerDict);

var foo = myDict["0"]["name"]; // returns "name 0"

string json = Newtonsoft.Json.JsonConvert.SerializeObject(myDict);

【讨论】:

  • 如果您解释您的代码以及它如何帮助 OP,而不是仅仅将其转储到页面上,这将很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多