我正在将JSON字符串解析为项目列表。 json文本将项目组织为父项"材料"下的字典。以下代码有效。在我不需要MaterialHeader类的地方有更好的方法吗?
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;
}