C# 无法在Web API中将派生属性序列化为JSON
我正在尝试获取此类型的对象(通过Web API): 我得到一个错误:C# 无法在Web API中将派生属性序列化为JSON,c#,asp.net-web-api,entity-framework-5,json.net,C#,Asp.net Web Api,Entity Framework 5,Json.net,我正在尝试获取此类型的对象(通过Web API): 我得到一个错误: “从'Domain.Document'上的'FolderParent'获取值时出错。”我将一个简单的示例放在一起,它序列化得很好。看起来这个bug一定是来自FileFolder类设计中的某个地方,我们现在还没有 [TestClass] public class UnitTest8 { [TestMethod] public void TestJasonFileFolder() { var
“从'Domain.Document'上的'FolderParent'获取值时出错。”我将一个简单的示例放在一起,它序列化得很好。看起来这个bug一定是来自FileFolder类设计中的某个地方,我们现在还没有
[TestClass]
public class UnitTest8
{
[TestMethod]
public void TestJasonFileFolder()
{
var folder = new FileFolder();
folder.Folder = new FileFolder { Name = "Parent" };
folder.Name = "Something";
var document = new Document { Folder = folder, Id = 1 };
var test = JsonConvert.SerializeObject(document);
Assert.IsNotNull(test);
}
}
public class Document
{
public int Id { get; set; }
public FileFolder Folder { get; set; }
public FileFolder FolderParent
{
get
{
return this.Folder.Folder;
}
}
}
public class FileFolder
{
public string Name { get; set; }
public FileFolder Folder { get; set; }
}
文件夹类是什么样子的。似乎您的示例中一定有输入错误,因为您甚至无法使用名称文件夹的成员编译类公用文件夹。已更改名称,这不是实际代码。建议:在方法中提供不同的名称,因为您有一个同名的对象(文件夹)。是否编译?您应该有如下错误:不一致的可访问性:属性类型“namespacename.FileFolder”小于属性“namespacename.Document.FolderParent”。我不知道序列化的是否是JsonConvert,但我认为它是Web API中的默认序列化程序(到JSON)。我将这行代码放在我的WebApiConfig.cs中:var appXmlType=config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t=>t.MediaType==“application/xml”);config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);当然,您可以接受我提供的单元测试,并将其用于特定的代码库。如果JsonConvert.Serialize工作正常,那么我们就知道这是一个配置/WebAPI问题。如果它确实抛出了相同的错误,那么我们就知道这是FileFolder类的某种问题。我尝试过了,它通过了。所以我的Web API配置可能有问题
[TestClass]
public class UnitTest8
{
[TestMethod]
public void TestJasonFileFolder()
{
var folder = new FileFolder();
folder.Folder = new FileFolder { Name = "Parent" };
folder.Name = "Something";
var document = new Document { Folder = folder, Id = 1 };
var test = JsonConvert.SerializeObject(document);
Assert.IsNotNull(test);
}
}
public class Document
{
public int Id { get; set; }
public FileFolder Folder { get; set; }
public FileFolder FolderParent
{
get
{
return this.Folder.Folder;
}
}
}
public class FileFolder
{
public string Name { get; set; }
public FileFolder Folder { get; set; }
}