C# 使用DataContractJsonSerializerSettings解析JSON中的字典,不使用头类
我正在将一个JSON字符串解析为一个项目列表。json文本将这些项组织为父项“material”下的字典。下面的代码可以工作。在我不需要MaterialHeader类的情况下,有没有更好的方法来实现这一点C# 使用DataContractJsonSerializerSettings解析JSON中的字典,不使用头类,c#,json,datacontractjsonserializer,C#,Json,Datacontractjsonserializer,我正在将一个JSON字符串解析为一个项目列表。json文本将这些项组织为父项“material”下的字典。下面的代码可以工作。在我不需要MaterialHeader类的情况下,有没有更好的方法来实现这一点 public class Material { public Material() { E = 209000; nu = 0.3; } public double E; public double nu; publ
public class Material
{
public Material()
{
E = 209000;
nu = 0.3;
}
public double E;
public double nu;
public double ultimateStrength; // new
public double enduranceLimit; // new
public double yieldStrength; // new
public double density; // new
public double sB0; // new
public String itemNumber; // new
public string form; // not needed for FEA
public string description; // not needed for FEA
public double cost; // not needed for FEA
}
public class MaterialHeader
{
public Dictionary<String,Material> material;
}
public List<Material> Materials(String companyID) {
var response = "{ \"material\": { \"PM00000050\": { \"cost\": \"1.6\",\"E\": \"209000\",\"yieldStrength\": \"306\",\"description\": \"1045\",\"form\": \"Plate\",\"nu\": \"0.3\",\"enduranceLimit\": \"256\",\"sB0\": \"409\",\"ultimateStrength\": \"570\",\"density\": \"7.85\"},\"PM00000051\": { \"cost\": \"1.62\",\"E\": \"209000\",\"yieldStrength\": \"270\",\"description\": \"4140\",\"form\": \"Plate\",\"nu\": \"0.3\",\"enduranceLimit\": \"243\",\"sB0\": \"409\",\"ultimateStrength\": \"540\",\"density\": \"7.85\"},\"PM00000055\": { \"cost\": \"1.61\",\"E\": \"209000\",\"yieldStrength\": \"306\",\"description\": \"K1045\",\"form\": \"Bar\",\"nu\": \"0.3\",\"enduranceLimit\": \"256\",\"sB0\": \"409\",\"ultimateStrength\": \"570\",\"density\": \"7.85\"},\"PM00000056\": { \"cost\": \"1.62\",\"E\": \"209000\",\"yieldStrength\": \"270\",\"description\": \"K4140\",\"form\": \"Bar\",\"nu\": \"0.3\",\"enduranceLimit\": \"243\",\"sB0\": \"409\",\"ultimateStrength\": \"540\",\"density\": \"7.85\"} }}";
DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
settings.UseSimpleDictionaryFormat = true;
var serializer2 = new DataContractJsonSerializer(typeof(MaterialHeader), settings);
var ms2 = new MemoryStream(Encoding.Unicode.GetBytes(response));
var output1 = new MaterialHeader();
try
{
output1 = (MaterialHeader)serializer2.ReadObject(ms2);
}
catch (SerializationException exp)
{
System.Windows.Forms.MessageBox.Show(exp.Message);
}
var output2 = new List<Material>();
foreach ( var item in output1.material)
{
item.Value.itemNumber = item.Key; // Set the item number
output2.Add(item.Value);
}
return output2;
}
公共类材料
{
公共材料()
{
E=209000;
nu=0.3;
}
公共双E;
公共双怒;
公共双重终极力量;//新
公共双enduranceLimit;//新
公共双屈服强度;//新
公共双密度;//新
公共双sB0;//新建
公共字符串itemNumber;//新建
公共字符串形式;//FEA不需要
公共字符串描述;//FEA不需要
公共双重成本;//FEA不需要
}
公共类材料标题
{
公共词典材料;
}
公共列表材料(字符串公司ID){
“1.6\”,“E\”:“20.9万\”,“E\”:“20.9万\”,“屈服强度强度”:“306\””,“材料”材料\””,“描述\”,“描述\”,“描述\”:,“材料\”,“描述\”,“描述\”,“描述\”,“描述\”::,,,,“描述\”::::,,,,,,,,,“描述\”,,,,,,,,,,,,,“描述\”,,,,,,,,,,,,,,,,,,,,,,,,,,“描述\,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“形式:,,,,“表格:,,,,,,,,,,,,“209000”,“屈服强度”\“金属板”和“nu\”::“0.3\”,“非”努”努:“:“0.3\”,“持久性非金属材料试验”以及“持久性非金属金属材料试验”对::“243\”,,“sB0\”,,“描述描述”描述:“,“描述描述描述”描述:“,“描述描述”描述”描述:“,“描述”描述”描述:“,,“描述”描述”描述:“:“4140 40.40\,,,,,,,“描述”描述”描述”描述”描述:“,,,,,,,“描述”描述”描述”描述:“,,,,,,,,,,,“最终强度::“最终强度:“:“强度:“::::“强度:“,,,,,,,,,,“最终强度:“::::“强度:,,,,,,,,,,,,,,,,“最终强度:,,,,,,:“0.3\”,“持久禁欲”:“256\”,“sB0\”“409\”,“409\”,,“最终强度”以下的“409\”,“最终强度”以下的“强度”以下的“强度”以下的“密度”以下的“7.85\”,“PM00000056\”,,“409\”,,“409\”,,“最终强度”以下的“409\”,,“最终强度”以下的“最终强度”以下的“409\”,,,“密度”密度::“7.7.7.85\”,“密度:”,“7.7.85\”,“7.85\”,,“7.7.85\”,,,,“密度:”,,,,“形式:”:“形式:”:“酒吧”“酒吧”“酒吧”“酒吧”“酒吧”“酒吧”,“努”“努”“纽”“努”“努”“努”“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3}”;
DataContractJsonSerializerSettings设置=新建DataContractJsonSerializerSettings();
settings.useSimpleditionAryFormat=true;
var serializer2=新的DataContractJsonSerializer(typeof(MaterialHeader),设置);
var ms2=newmemoryStream(Encoding.Unicode.GetBytes(response));
var output1=新材料标题();
尝试
{
output1=(MaterialHeader)serializer2.ReadObject(ms2);
}
catch(SerializationException exp)
{
System.Windows.Forms.MessageBox.Show(exp.Message);
}
var output2=新列表();
foreach(output1.material中的var项)
{
item.Value.itemNumber=item.Key;//设置项目编号
输出2.添加(项目值);
}
返回输出2;
}
您不需要一些技巧来避免它。请原封不动地使用它。您可以将其反序列化为字典
。但您的代码看起来很好。